2015-05-17 6 views
1

Я не пишу в Rails. Это просто рубин.Как не требовать определенных драгоценных камней/строк кода в производстве, которые мне нужны в разработке

Но у меня есть среда для разработчиков, у которой есть собственная группа разработки в Gemfile.

Но я не использую их в производстве на Iron.io.

В частности, я использую «log_buddy» и имеет множество сообщений d {var}.

И я использую pry, который имеет заявление require pry и require-debug.

Эти инструкции создают ошибки в случае pry и дублируют регистрацию в случае log_buddy, когда код запускается в процессе производства.

Как я могу провести различие между двумя средами?

Я читал о dotenv и некоторых других драгоценных камнях, но не совсем понял, как это будет работать в моем сценарии.

ответ

1

Если у вас есть только yes/no сценарий для dev, dotenv Семья - это излишество. Я хотел бы пойти с окружающим требованием Dev с:

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

, а затем запустить сценарии развития, как:

DEV=true bundle exec ... 

Поскольку DEV переменной окр не определен на вашем прод сервере, ничего не будет включено там.

Init для log_buddy может выглядеть следующим образом:

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

Спасибо, что делает Инициатор? Я бы хотел, если бы не было среды DEV, чтобы передать следующее: 'LogBuddy.init: disabled => true' – Angela

+0

ли я запускаю веб-приложение следующим образом:' DEV = true bundle exec shotgun -o 0.0.0.0 web ... .rb' (все из 'bundle' on - это то, как я запускаю приложение, находящееся в настоящее время в режиме dev. – Angela

1

Не с помощью 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 

И как только вы закончите, quire драгоценные камни:

Bundler.require(:default, bundler_env) 
+0

как это позаботится о строках кода, которые полагаются на драгоценные камни, например' d' log_buddy? Если бы я мог установить переменную окружения для log_buddy он может остановить вывод – Angela

+0

* Когда вы иногда хотите отключить LogBuddy (но вы не хотите удалять все свои операторы отладки), вы можете передать опцию: disabled в опции init hash * ([ref] (https : //github.com/relevance/log_buddy)) –

+0

И у вас на самом деле не должно быть никаких отладочных операторов в вашем коде, кроме журнала 'debug'-level. Именно поэтому' rubocop' жалуется на любые 'binding.pry', которые он видит . –