繁体   English   中英

Rails helper方法在不同环境中的工作方式不同

[英]Rails helper method that works differently in different environments

在Ruby on Rails应用程序中,我有一个控制器,我想要一些有条件运行的功能,其中条件取决于运行应用程序的环境。作为一个人为的例子,在开发模式中我喜欢它做:

if foo == 5:
    ...
end

在生产模式中,我想:

if foo > 6:
    ...
end

两个条件之间的差异比单个常数(上例中的5或6)更复杂。

在Rails中最常用的方法是什么? 我会直接在environments/文件中编写辅助方法吗? 或者向应用程序控制器添加一个检查当前环境的方法? 或者是其他东西?

我只想在逻辑语句中添加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

我经常需要在我的应用程序中,在各个地方执行此操作。 例如,我不想在开发模式中包含分析代码。 所以我在应用程序控制器中设置了一个或两个实例变量:

before_filter :setup_variables

def setup_variables
  @development = (ENV['RAILS_ENV'] == "development")
  @production  = (ENV['RAILS_ENV'] == "production")
end

我现在可以测试是否我在开发模式无论是在控制器和视图来的。

但另一个注意事项。 如果您正在进行大量基于案例的切换(如果是开发/生产),您可能希望将其重构为一组单独的对象,您可以根据环境进行切换。 例如,有一个DevelopmentLogic lib和一个ProductionLogic lib。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM