通过可安装的Rails引擎捆绑到应用中时,geem railsconfig / config无法加载

时间:2018-06-24 18:28:16

标签: ruby-on-rails configuration rubygems rails-engines rails-generators

我正在编写一个Rails 5.2可安装引擎,用于将Rails应用程序配置为面向服务的体系结构的一部分。

我一直在尝试在引擎内部使用Config Gem,但不断出现以下错误

install_generator.rb:28:in 'create_database_yml': undefined method 'adapter' for nil:NilClass (NoMethodError)

这是因为我正在尝试构建一个生成器,该生成器基于通过Config gem插入到要复制到文件中的字符串的值来制作正确配置的database.yml文件。导致错误的方法在下面,并且完整的生成器模块代码也在下面的要点。

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

我已将gem捆绑到rails项目中,当运行生成器时,这是我收到上面提到的错误的时间。

您可以在下面看到完整的堆栈跟踪。

打开Rails控制台并调用Settings对象

...(这是Config对象的别名,该对象是gem的核心。)

我在控制台中返回了一个有效的Settings对象。这让我知道Settings对象在运行我的引擎的rails应用程序中可用。

但是该错误使我相信对Settings的调用返回了一个有效的对象……然后对.database的调用返回了nil。然后我们得到那个著名的Rails错误undefined method for nil:NilClass

我用于gem的settings.yml文件的格式正确,因此当我在几乎每个项目中都使用gem时,没有理由该语法不起作用,因此Im非常了解其功能以及使用方法。

database:
  adapter: 'postgresql'

这仅使我相信,由于某种原因,设置gem并未按原样加载.yml文件。可能是加载路径混乱了,或者当引擎绑定到应用程序中时,配置gem在错误的时间加载。

任何人如对如何使该宝石在发动机中正常工作有任何信息,将不胜感激。

这是完整堆栈跟踪的要旨

full stack trace to error

0 个答案:

没有答案