在Ruby on Rails应用程序中,我有一个控制器,我想要一些有条件运行的功能,其中条件取决于运行应用程序的环境。作为一个人为的例子,在开发模式中我会喜欢这样做:
if foo == 5:
...
end
在制作模式中,我想:
if foo > 6:
...
end
两个条件之间的差异比单个常量(上例中的5或6)更复杂。
在Rails中执行此操作的最惯用方法是什么?我会直接在environments/
文件中编写辅助方法吗?或者向应用程序控制器添加一个检查当前环境的方法?或其他什么?
答案 0 :(得分:8)
我只想在逻辑语句中添加ENV['RAILS_ENV']
的检查。
http://guides.rubyonrails.org/configuring.html#rails-environment-settings
我会将您的代码更改为:
if foo == 5 && ENV['RAILS_ENV'] == "development" then
...
elsif foo > 6 && ENV['RAILS_ENV'] == "production" then
...
end
这只是流量控制的另一个条件,无需使其复杂化。
如果你需要做很多事情,application.rb
中的一些方法可能有所帮助:
def isDev
ENV['RAILS_ENV'] == "development"
end
def isProd
ENV['RAILS_ENV'] == "production"
end
答案 1 :(得分:1)
我经常需要在我的应用程序中,在各个地方执行此操作。例如,我不想在开发模式中包含分析代码。所以我在应用程序控制器中设置了一个或两个实例变量:
before_filter :setup_variables
def setup_variables
@development = (ENV['RAILS_ENV'] == "development")
@production = (ENV['RAILS_ENV'] == "production")
end
我现在可以在控制器和视图中测试我是否处于开发模式两者。
另一个注意事项。如果您正在进行基于案例的切换 lot (如果开发/生产),您可能希望将其重构为一组单独的对象,这些对象可根据环境进行更换。例如,有一个DevelopmentLogic lib和一个ProductionLogic lib。