ruby on rails - initializers - Cómo requerir algunos archivos lib desde cualquier lugar
ruby on rails download (5)
Te explicaré mi situación.
Aquí está mi árbol de archivos en mi aplicación de rieles:
lib / my_module.rb
require ''my_module/my_file''
module My_module
end
lib / my_module / my_file.rb
class Tweetag::Collector
(...)
end
He hecho un script ruby que he puesto en config / jobs /
Realmente no entiendo cómo se supone que debo requerir el archivo my_file.rb en este archivo.
require ''../../my_module/my_file.rb''
Me da ''require'': no puedo cargar dicho archivo
El mismo error solo requiere "my_module", que es lo que hago en mis controladores ...
¿Alguien aquí para explicarme? Muchas gracias
Creo que hay dos soluciones.
1) Agregar la ruta lib a la ruta de búsqueda. En rubi
$:.unshift(''../../my_module/lib'')
Entonces puedes require ''my_module.rb''
Creo que la respuesta de Vecchia Spugna es la versión de rieles de mi respuesta de rubí. (No estoy familiarizado con los rieles).
2) Otra solución:
En tu lib/my_module.rb
necesitas my_file
. Este archivo se encuentra en relación con su my_module.rb
? Luego use require_relative
:
require_relative ''./my_module/my_file''
Puede incluir automáticamente todo lo que esté debajo de la folder
lib y evitar estos problemas:
Escriba este su archivo en config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Si quieres requerir solo un archivo específico entonces,
hacer algo en relación con la raíz Rails como este
for ex: --
lib/plan.rb
module Plan
...some code...
end
y si desea requerirlo solo en algún modelo, diga app / models / user.rb
hacer en el modelo de usuario
require "#{Rails.root}/lib/plan"
class User < ActiveRecord::Base
include Plan
end
Si quieres que esté disponible en todas partes.
Una solución es dada por @VecchiaSpugna
y también puede crear un archivo ruby en la carpeta config / initializers
y requieren todos los archivos de allí uno por uno
O
try this
require ''../../my_module/my_file''
instead of
require ''../../my_module/my_file.rb''
you don''t need specify extension with require.
Similar a require_relative,
# inside lib/my_module.rb
require File.expand_path(''./my_module/my_file'', File.dirname(__FILE__))
Esto expande la ruta del directorio de archivos actual y agrega la ruta de archivo relativa que se requiere.
Solo intervino porque me llevó una eternidad resolver esto porque muy pocas soluciones funcionaron.
• Tuve que usar liso viejo requiere. Lo puse en el archivo config/application.rb
.
patching_file_path = File.expand_path("./lib", Dir.pwd) Dir[patching_file_path+''/*.rb''].each {|file| require file }
• También puse un puts "I''m Working!
temporal puts "I''m Working!
En el archivo que trato de requerir para que pueda revisar la consola para ver si está cargando.
• Además, si está utilizando un cargador de resorte, antes de iniciar la consola, debe hacer un bin/spring stop
en su terminal antes de iniciar la consola de rieles. De lo contrario, no cargará nuevos archivos.