2010-12-14 15 views
22

मेरे पास एक छोटा सा वेब ऐप है, जो रत्नों का एक गुच्छा का उपयोग करता है। उनमें से कुछ का उपयोग केवल test और development वातावरण के लिए किया जाता है। अब, जब मैं निम्न आदेश का उपयोग कर उत्पादन सर्वर पर यूनिकॉर्न शुरू करने का प्रयास करता हूं, तो यह विफल हो जाता है।बंडलर उत्पादन में "विकास" और "परीक्षण" समूह रत्न स्थापित करने की गलत कोशिश कर रहा है

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 

Bundler सही वातावरण का पता लगाने और अनदेखी करने के लिए माना जाता है अन्य रत्न, है ना? अभी, मैं उन सभी लाइनों को हटा रहा हूं जो इस काम को पाने के लिए सर्वर पर डिफ़ॉल्ट समूह में नहीं हैं, लेकिन यह एक बदसूरत हैक है।

+0

उत्पादन में Capistrano सही नहीं लगता है? –

उत्तर

52

बाद मैं खुदाई का एक बहुत इस समस्या के लिए समाधान मिल जाने। सर्वर को शुरू करने से पहले मुझे बस इतना करना था bundle install --without development test। यह BUNDLE_WITHOUT: test:development लाइन के साथ रेल रूट में .bundle/config फ़ाइल जोड़ता है। अब जब भी आप bundle install चलाते हैं या सर्वर शुरू करते हैं तो यह उन समूहों को अनदेखा कर देगा।

From the documentation

Bundler CLI आप समूह शामिल हैं जिनके जवाहरात बंडल स्थापित --without विकल्प के साथ स्थापित नहीं करना चाहिए की एक सूची निर्दिष्ट करने के लिए अनुमति देता है। अनदेखा करने के लिए कई समूहों को निर्दिष्ट करने के लिए, रिक्त स्थान से अलग समूहों की एक सूची निर्दिष्ट करें।

बंडल --without परीक्षण बंडल स्थापित विकास परीक्षण --without स्थापित बंडल परीक्षण --without स्थापित चलाने के बाद, बंडलर याद होगा कि आप पिछले स्थापना में परीक्षण समूह से निकाले गए। अगली बार जब आप बंडल इंस्टॉल करें, बिना किसी के - विकल्प के बिना, बंडलर इसे याद रखेगा।

इसके अलावा, कोई मानकों के साथ Bundler.setup बुला, या आवश्यकता "बंडलर/सेटअप" बुला सेटअप होगा सभी समूहों जिन्हें आप --without के माध्यम से बाहर रखा गया है के लिए छोड़कर (क्योंकि वे स्पष्ट रूप से उपलब्ध नहीं हैं)।

+0

में परिवर्तित करने के लिए उपयोग किया जाता है यह एक अच्छा जवाब था! –

+0

धन्यवाद! कॉन्फ़िगरेशन फ़ाइल के लिए वाक्यविन्यास की तलाश में था :) BUNDLE_WITHOUT: परीक्षण: विकास – Nultyi

+2

मुझे लगता है कि यह सिर्फ खराब डिज़ाइन है। डिफ़ॉल्ट रूप से गैर-देव कुछ भी क्यों नज़रअंदाज़ करें? आपको रत्न में समूह नहीं करना चाहिए और कमांड लाइन के माध्यम से बाहर नहीं होना चाहिए। यह देव पर्यावरण के लिए डिफ़ॉल्ट होना चाहिए और फिर आप उत्पादन या परीक्षण शामिल हैं। अन्यथा विकास के दौरान यह बहुत अनावश्यकता और सिरदर्द है। – PhillipKregg

-2

आप एक उत्पादन समूह निर्धारित नहीं किया है =)

+0

तो, यदि मेरे पास खाली "उत्पादन" समूह है, तो यह काम करेगा? –

+0

डुनो, आप कोशिश कर सकते हैं; पी देखें कि यह अभी भी स्पार्क मणि पूछता है। – Icid

+0

दुर्भाग्यवश परीक्षण के बारे में इतना कुछ नहीं पता (ओ।ओ) – Icid

4

मेरे मामले में यह जेनकींस एनवी से रत्न स्थापित कर रहा था। तो मुझे capistrano में अपना खुद का bundle_without चर सेट करना पड़ा।

Gemfile

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

deploy.rb

set :bundle_without, [:development, :test, :jenkins] 
संबंधित मुद्दे