【问题标题】:Rails helper method that works differently in different environments在不同环境中工作方式不同的 Rails 辅助方法
【发布时间】:2011-05-28 13:16:32
【问题描述】:

在 Ruby on Rails 应用程序中,我有一个控制器,我希望在其中有条件地运行一些功能,其中条件取决于应用程序运行的环境。作为一个人为的示例,在开发模式下我会喜欢这样做:

if foo == 5:
    ...
end

在生产模式下,我想:

if foo > 6:
    ...
end

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

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

【问题讨论】:

    标签: ruby-on-rails ruby environment conditional-statements helpers


    【解决方案1】:

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

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

    我现在可以在控制器和视图中测试我是否处于开发模式

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道那个(或 Rails 3 应用程序中的 Rails.env)。我的问题是在哪里以及如何最好地将其合并到应用程序中(在应用程序控制器中,environment.rb 等)。
      • 感谢您的澄清。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2012-12-30
      相关资源
      最近更新 更多