2010-12-14 62 views
22

我有一個小型的網絡應用程序,它使用了一堆寶石。其中一些僅用於testdevelopment環境。現在,當我嘗試使用以下命令在生產服務器上啓動獨角獸時,它失敗。bundler錯誤地試圖在生產中安裝「開發」和「測試」組寶石

unicorn_rails -E production -D -c config/unicorn.rb 

我在日誌文件中看到錯誤是:

Refreshing Gem list 
Could not find gem 'spork (>= 0.9.0.rc2, runtime)' in any of the gem sources listed in your Gemfile. 
Try running `bundle install`. 

我已經粘貼下面我的Gemfile:

source 'http://rubygems.org' 

gem 'rails', '3.0.1' 
gem 'unicorn' 
gem 'mongoid', '>= 2.0.0.beta.19' 
gem 'devise' 
gem 'cancan' 
gem 'haml', '>= 3.0.0' 
gem 'bson' 
gem 'bson_ext' 
gem 'formtastic' 
gem 'bluecloth' 

group :production do 
    gem 'capistrano' 
end 

group :development do 
    gem 'haml-rails' 
    gem 'hpricot', '0.8.2' 
    gem 'ruby_parser', '2.0.5' 
    gem 'less' 
    gem 'rspec-rails', '>= 2.0.1' 
end 

group :development,:test do 
    gem 'spork', '>=0.9.0.rc2' 
    gem 'mongoid-rspec' 
end 

group :test do 
    gem 'factory_girl_rails' 
    gem 'autotest' 
    gem 'cucumber-rails' 
    gem 'cucumber' 
    gem 'capybara' 
    gem 'shoulda' 
    gem 'database_cleaner' 
    gem 'test_notifier' 
    gem 'rspec', '2.0.1' 
    gem 'launchy' 
end 

捆綁器應該檢測合適的環境,而忽略其他寶石,對吧?現在,我刪除了所有不在服務器上的默認組中的行,以使其正常工作,但這是一個醜陋的黑客行爲。

+0

Capistrano的生產似乎deploy.rb不正確的? – 2013-05-30 08:52:05

回答

52

經過大量挖我發現這個問題的修補程序。我只需要在啓動服務器之前運行bundle install --without development test。這會在rails根目錄中添加一個.bundle/config文件與BUNDLE_WITHOUT: test:development行。現在,無論何時運行bundle install或啓動服務器,它都會忽略這些組。

From the documentation

所述捆綁CLI允許您指定 其寶石捆綁 安裝不應與 --without選項安裝組的列表。要指定多個要忽略的組,請指定由空格分隔的 組列表。

捆綁安裝--without測試包 安裝--without開發測試 運行捆綁安裝--without 測試後,捆綁會記得你 排除測試組中最後一個 安裝。下次運行 軟件包安裝時,如果沒有任何 - 沒有 選項,bundler會記住它。

此外,調用Bundler.setup沒有 參數,或調用需要 「打捆/設置」將設置所有組 除了你通過 --without排除那些(因爲他們顯然不適用)。

+0

這是一個很好的答案! – 2013-01-16 20:56:58

+0

謝謝!正在尋找配置文件的語法:) BUNDLE_WITHOUT:test:development – Nultyi 2014-01-03 09:57:14

+2

我認爲這只是糟糕的設計。爲什麼不默認忽略任何非開發?您不必在gemfile中進行分組,並通過命令行進行排除。它應該默認爲開發環境,然後包括生產或測試。否則在開發過程中會造成很多冗餘和麻煩。 – PhillipKregg 2014-09-27 21:28:37

-2

您還沒有定義的製作組=)

+0

因此,如果我有一個空的「生產」組,它會起作用嗎? – 2010-12-14 11:36:48

+0

不知道,你可以試試; p看看它是否仍然問spork寶石。 – Icid 2010-12-14 11:41:02

+0

不知道那麼多關於測試不幸(o。O) – Icid 2010-12-14 11:45:46

4

在我的情況下,它是從詹金斯env安裝寶石。所以我不得不在capistrano中設置自己的bundle_without變量。

的Gemfile

group :test, :development, :jenkins do 
    gem 'test-unit', '1.2.3' 
    gem 'rspec-rails' 
end 

set :bundle_without, [:development, :test, :jenkins]