【问题标题】:Get environment settings in rails controller在 Rails 控制器中获取环境设置
【发布时间】:2012-04-23 12:30:41
【问题描述】:

我在 development.rb 中有一些电子邮件设置,我想在我的控制器中访问。

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'

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

感谢您的帮助。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

只是一个旁注: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 中选择配置值?
  • 和 smtp 设置,我已经添加到 development.rb 中,那些也不会自动从 production.rb 中选择?
  • @AnilD 如果您在生产环境中运行 Rails,它将从 app/environment.rb 和 app/environments/production.rb 加载配置设置。所以不,它不会从开发中选择设置。
  • 这就是我需要的,我也在生产中添加了所有设置:)
  • @AnilD 对于您的自定义设置和 smtp 之类的东西,我们鼓励您将它们放在 config/initializers/ 中。看一下这个例子:railscasts.com/episodes/… /config/initializers/setup_mail.rb 文件将被自动加载。这就是 Rails.env 派上用场的地方,因为您可以为不同的环境创建不同的设置。
【解决方案2】:

尝试访问:

Rails.application.config.notify_submited_transaction
Rails.application.config.notify_approved_transaction

似乎类似于:For Rails, how to access or print out config variables (as experiment or test / debugging)

【讨论】:

  • Vik,当应用程序部署到生产环境时,它会自动从 production.rb 中选择配置值,对吧?
  • 是的,根据环境,它将加载环境文件的所有设置,但这些变量应该在所有环境文件中。
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2013-01-21
相关资源
最近更新 更多