在Rails控制器中获取环境设置

8

我希望在我的控制器中访问一些开发时设置,在 development.rb 中的设置如下:

config.notify_submited_transaction = 'anil@swiftsetup.com,anildbest83@gmail.com'
config.notify_approved_transaction = 'anil@swiftsetup.com'

在我的控制器/操作中,我正在尝试这样做:
  @to = Rails.env.notify_submited_transaction
  @subject = 'AM - Vendor Submitted Transaction'
  AmMailer.vendor_submited_transaction(@to, @subject, current_user).deliver

这会导致错误:

  undefined method `notify_submited_transaction'

我不确定如何获取我设置的配置值。

感谢任何帮助。


这可能是 https://dev59.com/43RB5IYBdhLWcg3wiHv7 和 https://dev59.com/BXM_5IYBdhLWcg3wRw51 的重复问题。 - Ernest
2个回答

19

顺便提一下:Rails.env 是一个特殊的字符串对象,它允许你获取当前的环境(它并不像Rack的env):

puts Rails.env # => "production"
puts Rails.env.test? # => false

它的目的不是返回配置设置。

当你想要将自定义设置放置在/config/initializers/*下,并且为了清晰起见,在某些情况下,这可能会很方便(建议不要在Rails环境文件中混杂自定义设置)。例如:

# config/initializers/mailer_settings.rb
if Rails.env.production?
  ActionMailer::Base.smtp_settings = {
    :address              => "smtp.gmail.com",
    ...
  }
else
  #different settings
end

那么,当应用程序部署到生产环境时,它不会自动从production.rb中获取配置值吗? - Anil D
SMTP设置我已经在development.rb中添加了,但是它们也没有自动从production.rb中获取吗? - Anil D
@AnilD 如果你在生产环境下运行Rails,它将从app/environment.rb和app/environments/production.rb中加载配置设置。因此,它不会选择开发环境的设置。 - Ernest
这就是我需要的,我也在生产环境中添加了所有设置 :) - Anil D
@AnilD 对于您的自定义设置和smtp等内容,建议将其放在config/initializers/<your_file.rb>中。请参考以下示例:http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast /config/initializers/setup_mail.rb文件将自动加载。这就是Rails.env派上用场的地方,因为您可以为不同的环境创建不同的设置。 - Ernest
显示剩余2条评论

5

Vik,当应用程序部署到生产环境时,它会自动从production.rb中获取配置值,对吗? - Anil D
是的,根据环境,它将加载您的环境文件的所有设置,但是这些变量应该在所有环境文件中都存在。 - Vik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接