rails initializers descargar ruby-on-rails ruby require

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.