Я пишу монтируемый движок rails 5.2 для настройки приложения rails как части сервис-ориентированной архитектуры.
Я пытался использовать Config Gem внутри движка иЯ продолжаю получать следующую ошибку
install_generator.rb:28:in 'create_database_yml': undefined method 'adapter' for nil:NilClass (NoMethodError)
Это потому, что я пытаюсь создать генератор, который делает правильно сконфигурированный файл database.yml на основе значений, интерполированных через гем Config встрока, которая копируется в файл.Метод, вызывающий ошибку, приведен ниже, и этот полный код модуля генератора также приведен ниже.
generator.rb
def create_database_yml
database_name = Rails.application.class.parent_name.underscore.gsub("_","-")
create_file('config/database.yml',
%{default: &default
adapter: 'Settings.database.adapter'
encoding: unicode
pool: <%= ENV['RAILS_MAX_THREADS'] || 5 %>
prepared_statements: false
development:
<<: *default
database: #{database_name}_dev
production:
<<: *default
}
)
end
Я собрал гемв проект рельсы и когда я запускаю генератор, это когда я получаю ошибку, которую я упомянул выше.
Вы можете увидеть полную трассировку стека ниже.
Когда я открываю консоль рельсов и вызываю Settings
, объект
... (который является псевдонимом для объекта Config
, который является ядром драгоценного камня).
Я получил действительный объект Settings
, возвращенный в консоли.Это позволяет мне узнать, что объект Settings
доступен в приложении rails, которое запускает мой движок.
Однако ошибка заставляет меня поверить, что вызов Settings
возвращает действительный объект ... тогда вызов .database
возвращает ноль.И затем мы получаем эту известную ошибку rails undefined method for nil:NilClass
мой файл settings.yml для драгоценного камня правильно отформатирован, поэтому нет никаких причин, по которым этот синтаксис не будет работать, поскольку я использую драгоценный камень почти в каждом проекте, так что я хорошо осведомленего особенностей и как его использовать.
database:
adapter: 'postgresql'
Это только наводит меня на мысль, что по каким-то причинам гем настроек не загружает файлы .yml, как следует.Возможно пути загрузки перепутаны, или, возможно, гем конфигурации загружается не в то время, когда движок встроен в приложение.
Любой, кто имеет какую-либо информацию о том, как правильно заставить этот камень работать в движке, был бы очень признателен.
это суть трассировки полного стека
трассировка полного стека до ошибки