Загрузка зависимостей Ruby Gem

Я помещаю несколько общих моделей для приложения rails в его собственную жемчужину. Это просто модели, поэтому я не использую двигатель. Настройка, казалось, работала нормально, пока я не добавил гем "activ_as_list".

# gem - domain.gemspec
spec.add_dependency "acts_as_list"

# gem - lib/domain.rb
require "acts_as_list"

# gem - lib/domain/models/page.rb
acts_as_list scope: [:ancestry]

Это прекрасно работает в консоли для моего драгоценного камня, я могу запускать методы, специфичные для acts_as_list, как обычно. Однако, когда я добавляю свой драгоценный камень в другой проект, он выдает мне ошибку.

# project - Gemfile
gem "www_domain", path: "../www_domain"

Bundler::GemRequireError: There was an error while trying to load the gem 'domain'.
NoMethodError: undefined method `acts_as_list' for #<Class:0x0055da70121ab0>
/home/shaun/sites/demo/domain/lib/domain/models/page.rb:32:in `<class:Page>'

Есть ли что-то особенное, что я должен сделать в этом случае, чтобы получить доступ к acts_as_list метод, потому что моя модель внутри драгоценного камня?

Обновление: вот мой полный lib/domain.rb файл для драгоценного камня:

require "yaml"
require "active_record"
require "acts_as_list"
require "ancestry"

# rbfiles = File.join(File.dirname(__FILE__), "lib", "**", "*.rb")
# Dir.glob(rbfiles).each do |file|
#   require file.gsub("lib/", "")
# end

module Domain
  # Your code goes here...
  def self.root
    File.dirname(__dir__)
  end

  def self.db_config
    YAML.load_file("#{Domain.root}/db/config.yml")["development"]
  end
end

require "domain/version"
require "domain/models/page"
require "domain/models/menu"
require "domain/models/article"
require "domain/models/page_part"

я могу использовать acts_as_list а также ancestry методы в консоли моего драгоценного камня (работает bin/console из каталога драгоценных камней). Но консоль проекта (работает bundle exec rails console из каталога проекта) не запустится из-за упомянутой ошибки.

1 ответ

Это может быть связано с проблемой порядка загрузки, если модель требуется до require :acts_as_list заявление. Проверьте, не указывает ли драгоценный камень порядок загрузки. Если нет, вы можете попробовать что-то вроде:

# gem - lib/domain.rb
require "acts_as_list"

require "models/page"

Если порядок загрузки неясен, полезно добавить

puts __FILE__

в верхней части соответствующих исходных файлов.

Другие вопросы по тегам