如何在生产中不需要我在开发中需要的某些 gems/lines 代码

how to not require certain gems/lines of code in production that I need in development

我不是在写Rails。就是 ruby.

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

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

特别是,我使用 "log_buddy" 并且在整个过程中有很多 d {var} 语句。

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

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

如何区分这两种环境?

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

如果您只有 yes/no 开发方案,dotenv 系列就有点矫枉过正了。我会满足周围的开发要求:

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

然后 运行 开发方案为:

DEV=true bundle exec ...

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

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

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

不使用 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)