Ответ 1
Вы можете автоматически включить все под lib folder
и избежать этих проблем:
Введите этот файл в config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Я объясню свою ситуацию.
Вот мое дерево файлов в моем приложении rails:
lib/my_module.rb
require 'my_module/my_file'
module My_module
end
Библиотека/my_module/my_file.rb
class Tweetag::Collector
(...)
end
Я сделал ruby script, который я ввел в config/jobs/
Я действительно не понимаю, как я должен требовать файл my_file.rb в этом файле.
require '../../my_module/my_file.rb'
Он дает мне "require": невозможно загрузить такой файл
Такая же ошибка, просто требующая "my_module", что я делаю в своих контроллерах...
Кто-нибудь здесь, чтобы объяснить мне? Большое спасибо
Вы можете автоматически включить все под lib folder
и избежать этих проблем:
Введите этот файл в config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Если вы хотите запросить только определенный файл, сделайте что-нибудь относительно корня Rails, как это
for example: --
lib/plan.rb
module Plan
...some code...
end
и если вы хотите, чтобы это требовалось только в некоторых моделях, скажем app/models/user.rb
делать в пользовательской модели
require "#{Rails.root}/lib/plan"
class User < ActiveRecord::Base
include Plan
end
если вы хотите, чтобы он был доступен везде
@VecchiaSpugna предлагает одно решение
или вы можете создать файл ruby в папке config/initializers
и требовать все файлы там один за другим
ИЛИ ЖЕ
try this
require '../../my_module/my_file'
instead of
require '../../my_module/my_file.rb'
Вам не нужно указывать расширение для файла в require.
Я думаю, что есть два решения.
1) Добавьте путь к пути поиска. В рубине:
$:.unshift('../../my_module/lib')
Затем вы можете require 'my_module.rb'
Я думаю, ответ Vecchia Spugna - это рельсовая версия моего рубинового ответа. (Я не знаком с рельсами).
2) Другое решение:
В вашем lib/my_module.rb
вам потребуется my_file
. Этот файл находится относительно вашего my_module.rb
? Затем используйте require_relative
:
require_relative './my_module/my_file'
Аналогично require_relative,
# inside lib/my_module.rb
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))
Это расширяет путь к текущему каталогу файлов и добавляет относительный путь к файлу, который требуется.
Просто вмешиваюсь, потому что мне понадобилось целую вечность, чтобы понять это, потому что очень мало решений работало.
• Мне пришлось использовать старый добрый запрос. Я положил его в файл config/application.rb
.
patching_file_path = File.expand_path("./lib", Dir.pwd) Dir[patching_file_path+'/*.rb'].each {|file| require file }
• Я также помещаю временный puts "I'm Working!
В файл, который я пытаюсь запросить, чтобы проверить консоль, чтобы убедиться, что она действительно загружается.
• Кроме того, если вы используете пружинный загрузчик, перед тем, как запустить консоль, вы должны сделать bin/spring stop
в своем терминале, прежде чем запустить консоль рельсов. В противном случае он не будет загружать новые файлы.