बुंडलर: आप अपने जेमफाइल को बदलने के बाद परिनियोजन मोड में स्थापित करने का प्रयास कर रहे हैं


86

मैं बंडलर और कैपिस्ट्रानो के लिए बहुत नया हूं, और मैं उन्हें एक साथ उपयोग करने की कोशिश कर रहा हूं। जब मैं तैनात करने की कोशिश करता हूं, तो मुझे संदेश मिलता है:

आप अपने Gemfile को बदलने के बाद परिनियोजन मोड में स्थापित करने का प्रयास कर रहे हैं। `बंडल स्थापित करें 'कहीं और चलाएँ और अपडेट किए गए Gemfile.lock को संस्करण नियंत्रण में जोड़ें।

मुझे नहीं पता कि शिकायत करने वाले सिस्टम को कैसे संतुष्ट किया जाए, और मुझे समझ नहीं आ रहा है कि शिकायत क्यों आ रही है क्योंकि मैं डॉक्टर में पढ़ा हूं :

यदि कोई Gemfile.lock मौजूद है, और आपने अपना Gemfile (5) अपडेट किया है, तो बंडलर उन सभी रत्नों के लिए Gemfile.lock में निर्भरता का उपयोग करेगा, जिन्हें आपने अपडेट नहीं किया था, लेकिन उन रत्नों की निर्भरता को फिर से हल कर देंगे, जिन्होंने अपडेट नहीं किया था । आप इस अद्यतन प्रक्रिया के बारे में अधिक जानकारी CONSERVATIVE UPDATING के तहत पा सकते हैं।

मैं इसकी व्याख्या करता हूं कि इसका मतलब यह है कि बुंडलर इस तथ्य को संभाल सकता है कि मेरी जेमफाइल वह नहीं है जिसकी उसे उम्मीद थी। कोई मदद?

चश्मा: रूबी 1.9.3, रेल 3.2.3, कैपिस्ट्रानो 2.12.0, बुंडलर 1.1.4, विंडोज 7, एक पॉज़िक्स मशीन की तैनाती।

संपादित करें: मेरी जेमाइल में निम्न की तरह तर्क ब्लॉक शामिल हैं:

unless RbConfig::CONFIG['host_os'] === 'mingw32'
  # gem 'a' ...
end

जवाबों:


80

त्रुटि संदेश जो आपको मिल रहा है वह Gemfile.lockहो सकता है क्योंकि आपके Gemfileऔर Gemfile.lockएक दूसरे से सहमत नहीं हैं। ऐसा लगता है जैसे आपने आखिरी बार bundle install(या update) दौड़ने के बाद अपने जेमफाइल में कुछ बदला है । जब आप bundle install, यह आपके Gemfile.lock को Gemfile में किए गए किसी भी बदलाव से अपडेट करता है।

सुनिश्चित करें कि आप bundle installस्थानीय रूप से चलाते हैं , और Gemfile.lockउसके बाद अपने नए अपडेट को नियंत्रित करने के लिए चेक-इन स्रोत । फिर तैनाती का प्रयास करें।

संपादित करें : जैसा कि टिप्पणियों में मान्यता प्राप्त है, जेमफाइल में एक सशर्त एक मंच पर एक मान्य जेमफाइल.लॉक के परिणामस्वरूप, दूसरे पर अमान्य है। उपलब्ध कराना : Gemfile में इन प्लेटफ़ॉर्म-निर्भर रत्नों के लिए प्लेटफ़ॉर्म ध्वज को विषमता को हल करना चाहिए।


2
सही उत्तर की तरह लगता है, लेकिन मैंने अपने देव मशीन पर बंडल इंस्टाल चलाया, फिर जेमफाइल और इसके लॉक दोनों को svn में चेक किया, फिर कैपिस्ट्रानो का इस्तेमाल किया। समस्या हो सकती है क्योंकि Gemfile में एक ब्लॉक शामिल है unless RbConfig::CONFIG['host_os'] === 'mingw32':? (एर्गो को मेरे विंडोज़ कंप्यूटर पर लिनक्स सर्वर की तुलना में अलग-अलग वस्तुओं को बंडल करना चाहिए।)
जेलेककैट

1
काफी संभवतः। अपने Gemfile.lock की सामग्री की जांच करें - क्या इसमें संदर्भ रत्न (ओं) को शामिल किया गया है जो केवल विंडोज पर शामिल होना चाहिए? यदि हां, तो यह सुझाव देगा कि परिनियोजन मशीन पर Gemfile और Gemfile.lock अलग-अलग हैं। (इसके अलावा, मैं कोई बुंडलर विशेषज्ञ नहीं हूं, लेकिन मुझे पूरा यकीन है कि आपके जेमफाइल में सशर्त डाल देना सबसे अच्छा अभ्यास नहीं है। समूहों या : प्लेटफ़ॉर्म ध्वज का उपयोग करने पर विचार करें )।
एड्ड मॉर्गन

2
का उपयोग करते हुए :platformsजवाहरात जो मेरे prod (POSIX) सर्वर की जरूरत है, लेकिन जो मेरे देव पर नहीं थे के लिए ध्वज (जीत) सर्वर फर्क पड़ा: platforms :ruby do; gem 'mygem'; ...; end(। यदि आप अपने जवाब को यह अनुदेश जोड़ने कोई फ़र्क नहीं पड़ेगा हरे चेक प्राप्त)
जेल्लेकट

: प्लेटफ़ॉर्म लाइनक्स और / या डार्विन एनवी के बीच अंतर करने में सक्षम नहीं है :require, बहुत अच्छी तरह से काम करता है stackoverflow.com/a/16475580/933358
Daniël W. Crompton

यह मेरे लिए काम किया! धन्यवाद, मुझे निराशा के अधिक दिनों से बचाया!
तत्पश्चमगुल

26

vi .bundle / config

'1' से '0' तक BUNDLE_FROZEN विकल्प बदलें

"बंडल इंस्टॉल करें"


या

"बंडल कॉन्फ़िगर" चलाएं

देखें कि क्या "जमे हुए" मूल्य सही है, यह गलत है

बंडल विन्यास जमे हुए झूठे


मेरे लिए यही किया। दिलचस्प बात यह है कि कॉन्फिगर फाइल में ही, BUNDLE_FROZEN बिल्कुल भी सेट नहीं था। मुझे आश्चर्य है, क्या यह संभव है कि मैंने BUNDLE_FROZEN: 1 कहीं और सेट किया था?
बो। जी।

bundle config frozen falseमेरा गोटो ठीक है बहुत बहुत धन्यवाद, दो साल पर! मेरा मानना ​​है कि जोशुआ पिंटर का जवाब ऊपर की टिप्पणी को संबोधित करता है - यह इस पर प्रभाव डालने वाला वैश्विक बुंडलर विन्यास हो सकता है।
SRack

bundle config frozen falseमेरे लिए कुछ नहीं किया। संपादन .bundle / config में लिया गया जिसमें प्रविष्टि BUNDLE_FROZEN = "सत्य" (शाब्दिक सत्य)
Arthur

19

वैश्विक बुंडलर कॉन्फ़िगरेशन के लिए देखें।

मेरे पास अपने देव परिवेश पर एक वैश्विक विन्यास था, मेरे ~/.bundle/configपास मेरे CI / उत्पादन वातावरण में नहीं था, Gemfile.lockजो कि मेरे देव वातावरण में उत्पन्न हुआ था जो कि मेरे CI / उत्पादन वातावरण में एक से भिन्न था।

मेरे मामले में मैं github.httpsअपने देव परिवेश में सही साबित हो रहा था लेकिन मेरे सीआई / प्रोडक्शन के माहौल में ऐसा कोई विन्यास नहीं था। इससे दोनों Gemfile.lockफाइलें अलग-अलग हो गईं।


2
धन्यवाद! इस हास्यास्पद त्रुटि से संबंधित उड़ान के सभी सरल उत्तर --- यह वही है जो मुझे काम करने के लिए वापस मिला है। क्यों नरक में इसके साथ ऑटो-सहायता नहीं करता है? मेरे जीवन के अंतिम 3 घंटे खो जाने का क्या कारण है!
नरक

2
आपने शायद मेरी जान बचा ली है। मैं इस पर खुद को गोली मारने के लिए तैयार हो रहा था: पी
टाइरोन विल्सन

1
@JoshuaPinter, हाँ इसने मुझे बचा लिया! इसके साथ कई घंटे बिताने के बावजूद ... लेकिन मैं 'बंडल इनस्टॉल' करते समय जो चेतावनियाँ सुधार रहा था, उसे ठीक करने की कोशिश कर रहा था और इस अचार में फंस गया। बहुत सराहना की!
daveomcd

1
@daveomcd वहां गया, ख़ुशी हुई कि इसने आपके सिर को खरोंचने के कई घंटे बचाए। :)
जोशुआ पिंटर

11

जब आप निम्नलिखित देखें ...

$ bundle install
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.

You have added to the Gemfile:
* source: rubygems repository https://rubygems.org/
* rails (~> 3.2)
. . .

... फिर, समस्या सबसे अधिक संभावना है कि आपके पास आपके विक्रेता / कैश निर्देशिका में .gem फ़ाइलें हैं।

शायद, आप पहले भागे थे $bundle install --deploymentजो कैश में कुछ "आउटडेटेड" .gem फाइलें डालते हैं?

किसी भी स्थिति में, आप इस त्रुटि को चलाकर पा सकते हैं: bundle install --no-deployment

कि रेल के बारे में कई महान चीजों में से एक है ... त्रुटि संदेश अक्सर आपको बताएंगे कि समस्या को ठीक करने के लिए वास्तव में क्या करना है।


7

मेरी विशिष्ट समस्या @JoshPinter द्वारा रिपोर्ट की गई, यानी github से रत्नों को पुनः प्राप्त करने के लिए बंडलर द्वारा प्रयुक्त प्रोटोकॉल में देव-बनाम-परिनियोजित होस्ट विसंगतियों से संबंधित थी।

एक लंबी कहानी को संक्षिप्त करने के लिए, मुझे निम्नलिखित Gemfileप्रविष्टि को संशोधित करना था ...

gem 'activeadmin', github: 'activeadmin'

... इस सुरक्षित सिंटैक्स के लिए ( संदर्भ देखें ):

gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'

और मेरी तैनाती वापस सामान्य हो गई है।


यह मेरे लिए भी समस्या तय है। बहुत अजीब।
जोशुआ मुहीम

6

मेरे लिए समाधान यहां सूचीबद्ध अन्य लोगों की तुलना में थोड़ा अलग था। मैं साइडकीक से साइडकिक-प्रो (जिसमें बंडलर 1.7.12+ की आवश्यकता होती है) में अपग्रेड करने की कोशिश कर रहा था, लेकिन मैंने ट्रैविस-सीआई से "आप अपने जेमफाइल को बदलने के बाद तैनाती मोड में स्थापित करने की कोशिश कर रहे हैं" प्राप्त कर रहा है

ट्रैविस-सीआई के कंसोल आउटपुट का निरीक्षण करने से पता चला कि बंडलर के पुराने संस्करण का उपयोग किया जा रहा था।

मेरे मामले में, मुझे जोड़ने के लिए travis.yml फ़ाइल को संपादित करना था:

before_install: - gem update bundler

इसने ट्रैविस-सी को बंडलर के नवीनतम संस्करण का उपयोग करने के लिए मजबूर किया, और त्रुटि संदेश को दूर कर दिया।


यह Capistrano के तहत मेरे लिए काम किया चलाने के लिए cap shellऔर gem update bundlerया with <role> gem update bundlerयाon <machine> gem update bundler
एरिक



1

मैं पहले भी कुछ इसी तरह भाग गया था। इसे ठीक करने का एक तरीका है, मुझे लगता है, लेकिन आपके सर्वर पर आपकी इच्छा से अधिक जगह हो सकती है, दौड़ना है

bundle install --deployment 

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

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'

सेवा

gem 'rails_admin'

या आप यह सुझाव दे सकते हैं, और एक स्थानीय मशीन पर उत्पादन सर्वर से अपनी परियोजना को प्राप्त करें, इसे बंडल करें, और फिर अपने सर्वर पर पुनः भेजें। यह समाधान 100% सही नहीं हो सकता है, लेकिन इसमें से कुछ ने मेरे लिए काम किया है ... बस सोचा था कि मैं साझा करूंगा। सौभाग्य


1
--deploymentजब तक कि मैं Gemfile.lock नष्ट कर दिया झंडा एक फर्क नहीं किया। क्या ऐसा ही होना चाहिए?
जेल्लेकैट जूल

1

त्रुटि का दूसरा कारण:

यह थोड़ा मूर्खतापूर्ण है, लेकिन मुझे यकीन है कि कोई और ही गलती करेगा।

रेल के लिए 4 हरोकू ने मणि रेल_12factor जोड़ा। यदि आप इसे जोड़ने से पहले इसका उपयोग कर रहे थे, तो आपके पास ये दो रत्न होंगे:

gem 'rails_log_stdout',  github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'

जब आप नया जोड़ते हैं तो आपको उन्हें निकालना होगा। (वे शामिल हैं)। मुझे लगता है कि आप इसके साथ तब तक दूर हो सकते हैं जब तक आप उन्हें अपनी मणि फ़ाइल में लाइनों को नहीं छूते हैं, तब हरोकू दोहराव को नोटिस करता है और उपरोक्त त्रुटि से रोता है।

रेल 4 के साथ शुभकामनाएँ।


1

हमारे मामले में हम एक ऐसी सुविधा का उपयोग कर रहे थे जो हमारे उत्पादन मशीन पर चलने वाले बंडल के पुराने संस्करण में उपलब्ध नहीं थी। इसलिए यह बंडल अपग्रेड करने के लिए पर्याप्त था, अर्थात gem update bundler


धन्यवाद - मेरे पास यह मुद्दा भी था। सर्वर पर बंडलर के संस्करण के लिए निकला जो हमारे डेस्कटॉप पर उपयोग कर रहा था, उससे अधिक पुराना था।
नाथन बर्तराम

1

यह एक खतरनाक विचार हो सकता है, लेकिन अगर पूरी तरह से एक उत्पादन परिनियोजन वातावरण में कुछ परीक्षण करना चाहिए, तो आप .bundle / फ़ाइल संपादित कर सकते हैं

# This value is normally '1' 
# Set it to '0'
BUNDLE_FROZEN: '0'

अब बंडल का आह्वान करें, मेरे मामले में मुझे एक विशिष्ट मणि को अद्यतन करने की आवश्यकता थी, इसलिए यह मेरी आज्ञा है

RAILS_ENV=production bundle update <whatever gem>

आपको शायद अपडेट के बाद इसे वापस बदल देना चाहिए, इसलिए आपकी अपेक्षा के अनुरूप काम करते हैं। फिर, यह शायद असमर्थित है, और YMMV


0

मैं कुछ मणि अद्यतन के बाद एक नेस्टा ऐप को तैनात करने में भाग गया। मेरे लिए जो काम किया था वह Gemfile.lock को हटाने के लिए था , bundle installइसे फिर से बनाने और फिर से तैनात करने के लिए चला ।


0

लेकिन मैं दोनों किया था मैं ने वही समस्या में भाग bundle installऔर bundle updateऔर Heroku अभी भी मेरे धक्का खारिज कर दिया।

मैंने केवल Gemfile.lock को हटाकर और फिर से चलकर समस्या को ठीक bundle installकिया। मैंने तब जोड़ा, प्रतिबद्ध, और धक्का दिया कि मेरे git रेपो में। उसके बाद मुझे हरोकू को आगे बढ़ाने में कोई परेशानी नहीं हुई।


जब तक आप अपने रत्न संस्करणों में अपने रत्न संस्करणों को निर्धारित नहीं करते हैं यह जोखिम भरा है .. यह रत्न को अद्यतन कर सकता है और आपके ऐप को तोड़ सकता है
अब्राम

0

उसके लिए, आपको सिंटैक्स को बदलने की आवश्यकता नहीं है Gemfile। आप सिर्फ BUNDLE_GITHUB__HTTPSपर्यावरण चर के रूप में (डबल अंडरस्कोर नोट कर सकते हैं ) और इसे true( अनुभाग Settingsमें टैब के नीचे अपने हरोकू ऐप के डैशबोर्ड में Config Vars) सेट कर सकते हैं। इस से प्रोटोकॉल स्विच करेंगे git://करने के लिए https://इस तरह के सभी अनुरोधों के लिए।


0

हेरोकू को धक्का देने का प्रयास करने पर मुझे त्रुटि संदेश मिला। मुझे निम्नलिखित समाधान निश्चित मिला।

  1. Git पुल ओरिजिनल मास्टर
  2. गिट स्थिति
  3. कमिट
  4. गित धक्का मूल गुरु
  5. गिट धक्का heroku मास्टर

0

यह समस्या कोड के पुराने संस्करणों की ओर इशारा करते हुए सबमॉड्यूल्स से संबंधित हो सकती है। मेरे लिए, मैंने अपने सबमॉड्यूल को अपडेट करके इस मुद्दे को हल किया

यदि आपके पास सबमॉड्यूल हैं, तो दौड़ने का प्रयास करें:

git submodule update --init

bundle install


0

इस आदेश के बाद, आप अपने सामान्य बंडल को फिर से स्थापित कर सकते हैं:

bundle install --no-deployment

0

मैंने विभिन्न संसाधनों पर एक दर्जन समाधान पढ़े, लेकिन इस स्थिति में मेरी मदद नहीं कर पाया

तो मैंने एक उपाय खोजा। सटीक रूप से कह रहा हूं कि मैंने त्रुटि संदेश को ध्यानपूर्वक पढ़ा और इसमें एक उदासी थी: बंडल कहीं और स्थापित करें । "कहीं और" मेरा क्लाउड 9 था जहां मैंने अपना ऐप विकसित किया। तो मेरे कदम

  1. rsyncआदेश से स्थानीय मशीन के लिए सर्वर से Gemfile और Gemfile.lock की प्रतिलिपि बनाएँ
  2. इन दो फाइलों को मेरे RoR प्रोजेक्ट में डालें (मैंने Cloud9 का उपयोग किया है)
  3. जेमफाइल खोलें और जो चाहें बदलाव करें। मेरे मामले में मैंने मणि को जोड़ा 'पतला'
  4. Cloud9 पर अपने ऐप में टर्मिनल cd में और रन करें bundle install। इस स्थिति में आपके पास एक परिवर्तन होगा Gemfile.lock का संस्करण
  5. नया कॉपी करेंसर्वर का उपयोग करके Gemfile और Gemfile.lock कीrsync
  6. मेरे app फ़ोल्डर के लिए सीडी और फिर से चला गया bundle install --deployment --without development test ! सभी के लिए शुभकामनाएँ!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.