【问题标题】:how to not require certain gems/lines of code in production that I need in development如何在生产中不需要我在开发中需要的某些 gems/代码行
【发布时间】:2015-07-28 20:39:30
【问题描述】:

我不是在 Rails 中写作。它只是红宝石。

但我有一个开发环境,它在 Gemfile 中有自己的开发组。

但我不会在 Iron.io 的生产环境中使用它们。

特别是,我使用“log_buddy”,并且自始至终有很多d {var} 语句。

我使用pry,它有一个require pryrequire-debug 语句。

当代码在生产中运行时,这些语句会在 pry 的情况下产生错误,并在 log_buddy 的情况下产生重复的日志记录。

如何区分这两种环境?

我已经阅读了 dotenv 和其他一些 gem,但不太了解它在我的场景中是如何工作的。

【问题讨论】:

    标签: ruby environment-variables development-environment ruby-dotenv


    【解决方案1】:

    如果您只有 yes/no 开发场景,dotenv 家庭是矫枉过正。我会通过以下方式满足周围的开发要求:

    if ENV['DEV']
      require 'pry'
      ...
    end
    

    然后将开发场景运行为:

    DEV=true bundle exec ...
    

    由于DEV 环境变量未在您的产品服务器上定义,因此不会包含任何内容。

    log_buddy 的初始化可能如下所示:

    LogBuddy.init(ENV['DEV'] ? {:logger => Logger.new('my_log.log')} : nil)
    

    【讨论】:

    • 谢谢,Init 是做什么的?如果没有 DEV 环境可以通过以下内容,我希望它:LogBuddy.init :disabled => true
    • 我会以这种方式运行网络应用程序吗:DEV = true bundle exec shotgun -o 0.0.0.0 web....rbbundle 上的所有内容都是我当前在开发模式下运行应用程序的方式。
    【解决方案2】:

    不使用 Rails 并不妨碍你使用 Bundler groups:

    # These gems are in the :default group
    gem 'nokogiri'
    gem 'sinatra'
    
    gem 'wirble', :group => :development
    
    group :test do
      gem 'faker'
      gem 'rspec'
    end
    
    group :test, :development do
      gem 'capybara'
      gem 'rspec-rails'
    end
    
    gem 'cucumber', :group => [:cucumber, :test]
    

    那么你必须以任何你认为合理的方式获取环境名称:

    bundler_env = whatever # could be ENV['ENVIRONMENT'], for instance
    bundler_env ||= :production # Specify a fallback if none specified
    

    完成后,需要宝石:

    Bundler.require(:default, bundler_env)
    

    【讨论】:

    • 这将如何处理依赖 gem 的代码行,例如 log_buddy 的 d?如果我可以为 log_buddy 设置环境变量,它可以停止输出
    • 当你偶尔想要禁用 LogBuddy(但你不想删除所有调试语句)时,可以将 :disabled 选项传递给 init 的选项哈希 (ref)
    • 除了debug-level 日志记录之外,您的代码中实际上不应该有任何调试语句。这就是为什么rubocop 会抱怨它看到的任何binding.pry
    • 在生产中如何传递禁用的选项?谢谢.k
    • @Angela 设置环境名称的示例就在上面。在上面使用if
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2021-08-15
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多