我有时会遇到根据环境不同处理流量的情况。 (例如,禁用某些功能)
例如。 如果您使用生产,则可以在流程成功时发送电子邮件。 但对于 test 和开发环境,我们只需将其禁用即可。
现在,我只是放if-clause
。
ActiveRecord::Base.transaction do
itemable = create_invoiceitemable(each_line)
next unless itemable.present?
create_invoiceitem(invoice, itemable, each_line[:id])
end
ReceiptMailer.receipt(invoie[:uuid]).deliver_later if RAILS_ENV[:production]
有什么想法可以更好地处理这个问题?
答案 0 :(得分:1)
回答一个确切的问题是不可能的,因为它是基于意见的,但你可能会发现这些方法有用的方法:
<强>配置/初始化/ stubs.rb 强>
ReceiptMailer.prepend(Module.new do
def receipt(*args)
Logger.info "ReceiptMailer#receipt called with #{args.inspect}"
Hashie::Mash.new { deliver_later: nil } # to allow call
end
end) unless RAILS_ENV[:production]
答案 1 :(得分:0)
而不是依赖于环境的名称来检查是否应该激活某些内容..为什么不使用环境变量,您可以在环境特定文件中设置其值并检查其值。
这种方式,例如,如果您在Heroku上部署您的应用程序您可以启用或禁用此功能,而无需每次都接触代码或重新部署,因为这些都可以从界面或命令行获得。
我个人认为这是一个很好的方法。也可能有其他好方法。
你可以使用像dotenv这样的不同宝石来实现这一目标。那里可能还有其他宝石。
希望这会有所帮助:)