2015-05-17 31 views
1

我不是在Rails中編寫代碼。它只是紅寶石。如何在開發中不需要生產中的某些寶石/代碼行

但我有一個開發環境,它有自己的開發組在Gemfile中。

但我不使用它們在Iron.io上進行生產。

特別是,我使用「log_buddy」,並且有大量的d {var}聲明。

而我用pry其中有require pryrequire-debug聲明。

當代碼在生產中運行時,這些語句在prylog_buddy的情況下會產生錯誤。

如何區分這兩種環境?

我已閱讀約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) 
+0

謝謝,Init是做什麼的?我想如果沒有DEV環境傳遞以下內容:'LogBuddy.init:disabled => true' – Angela

+0

我會以這種方式運行Web應用程序:'DEV = true bundle exec shotgun -o 0.0.0.0 web ... .rb'(從'bundle'開始的所有內容都是我如何在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 

一旦你完成了,重新要求寶石:

Bundler.require(:default, bundler_env) 
+0

這將如何處理依賴於gem的代碼行,如log_buddy的'd'?如果我可以設置環境變量對於log_buddy,它可能會停止輸出 – Angela

+0

*如果您偶爾想要禁用LogBuddy(但不想刪除所有調試語句),可以將:disabled選項傳遞給init的選項hash *([ref](https) ://github.com/relevance/log_buddy)) –

+0

除了'debug'級別的日誌記錄,你不應該在你的代碼中實際上有任何調試語句,這就是爲什麼'rubocop'抱怨它看到的任何'binding.pry' –

相關問題