初始化期间找不到Rails配置变量

时间:2012-05-14 17:57:15

标签: ruby-on-rails configuration initialization environment-variables

我有一个文件 config / initializers / secrets.rb ,其中包含以下内容:

Rails.configuration.smtp_domain = "derp.com"
Rails.configuration.smtp_password = "derpderp"
Rails.configuration.smtp_user = "derp@derp.com"
Rails.configuration.smtp_address = "derp.derp.com"

在我的 config / environments / development.rb 中,我有以下内容:

config.action_mailer.smtp_settings = {
    :address              => Rails.configuration.smtp_address,
    :port                 => 587,
    :domain               => Rails.configuration.smtp_domain,
    :user_name            => Rails.configuration.smtp_user,                           
    :password             => Rails.configuration.smtp_password,
    :authentication       => 'login',                                                 
    :enable_starttls_auto => true                                                     
}

现在我bundle exec rails c时收到此错误:

`method_missing': undefined method `smtp_address' for #<Rails::Application::Configuration:0x007f8c4505b238> (NoMethodError)

但是如果我评论smtp配置,那么在控制台中我可以这样做:

Loading development environment (Rails 3.2.1)
irb(main):001:0> Rails.configuration.smtp_address
=> "derp.derp.com"
但是,我不能在制作中对此进行评论!非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 在这里抛出一些东西,也许该文件在初始化程序目录中是否正确?
  2. 您可以更改Rails.configuration....内容并将其更改为常量。例如,SMTP_DOMAIN = 'derp.com'等。
  3. 只是想知道这是否有效,那么你可以看到wtf正在进行Rails.configuration....的事情。如果这是TDD,我们会说,让它变绿。我没有看到像个人那样使用Rails.configuration,但谁知道,也许这是件事。

答案 1 :(得分:0)

从未看到过这种情况,但如果我将require_relative 'initializers/secrets'添加到environment.rb的顶部,则可以按照我的预期进行操作。

这对我来说很困惑,因为在初始化程序中,据我所知应该已经加载了。

如果有人能解释为什么我会高兴地接受你自己的回答。感谢。