2012-11-13 25 views
6

मुझे सलाह दी गई है कि Gemfile.lock को अनवरोधित न करें, हालांकि मैं मुद्दों में भाग गया।दोनों विंडोज़ और लिनक्स पर्यावरण में Gemfile.lock साझा करना

मैं अपनी विंडोज मशीन पर विकसित करता हूं, और लिनक्स (उबंटू) सर्वर पर धक्का देता हूं, यह मुद्दा बंडलर कुछ रत्नों के विंडोज संस्करण को ताला लगाता है, जो संस्करण संख्या के बाद x86-mingw32 जोड़ता है, जो मुद्दों का कारण बनता है।

GEM 
    remote: http://rubygems.org/ 
    specs: 
    actionmailer (3.2.1) 
    ... 
    mysql2 (0.3.11-x86-mingw32) 
    ... 

    PLATFORMS 
    x86-mingw32 

मैं Capistrano का उपयोग तैनात करने के लिए, और मैं इस त्रुटि मिलती है:

mysql एडाप्टर स्थापित करें:। मणि ActiveRecord-mysql-अनुकूलक स्थापित (mysql बंडल का हिस्सा नहीं है यह Gemfile में जोड़े ।)

हालांकि मेरी gemfile की तरह है:

... 
gem 'mysql2' 
... 

मुझे लगता है कि क्योंकि रेल खिड़कियों संस्करण ओ का उपयोग करने की कोशिश करता है f mysql2 जो Gemfile.lock

पर हल करने के लिए कोई विचार है?

उत्तर

6

अपने Gemfile के लिए निम्न और फिर बंडल अद्यतन (अपने वर्तमान mysql2 मणि ​​स्पष्ट रूप से लिस्टिंग बदलें)

 
    
if RUBY_PLATFORM =~ /win32/ 
    gem "mysql2", :platform => [:mswin, :mingw] 
else 
    gem "mysql2", :platform => :ruby 
end 
 

क्या इसका मतलब यह है, तो मंच 'Win32' (विंडोज़) है की तरह कुछ जोड़े तो स्थापित विंडोज़ संस्करण, अन्य सामान्य संस्करण स्थापित करें जो सभी यूनिक्स सिस्टम के लिए 'रूबी' है। कम से कम मुझे किसी भी यूनिक्स सिस्टम (मैक ओएस एक्स, लिनक्स से, सोलारिस तक, * बीएसडी तक) नहीं पता है कि यह काम नहीं करेगा।

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

आप शायद --deployment छोड़ सकता है और बस का उपयोग

 
    
    bundle update && bundle install --without=development,test,any_other_groups --path=./vendor/bundle 
 

इस के रूप में, यदि आप क्या आप की वजह से पर की तैनाती कर रहे हैं की तुलना में एक पूरी तरह से अलग प्लेटफॉर्म पर विकसित करने के लिए जा रहे एक आवश्यकता है संदर्भित, जिस तरह बंडलर काम करता है। उपरोक्त आदेश को ठीक से दोहराना चाहिए - तैनाती करता है। यह सब भी .bundle/config में दर्ज किया जाएगा।

+0

जानकारी के लिए धन्यवाद! 'Bundler/capistrano' – Ryan

+0

से हेल्पर्स का उपयोग करते हुए' --deployment' को अक्षम करने का कोई तरीका है जो मैं आपको नहीं बता सकता। मैं व्यक्तिगत रूप से capistrano का उपयोग नहीं करते हैं। – ddd

+0

धन्यवाद, मुझे यह उपर्युक्त रेखा के साथ पता चला है :) – Ryan

1

आप Windows पर कमांड प्रॉम्प्ट पर इसे टाइप करके RUBY_PLATFORM देख सकते हैं।

ruby -e 'puts RUBY_PLATFORM' 

उदाहरण के लिए, यह जेमफ़ाइल मेरे विंडोज लैपटॉप और लिनक्स सेवर पर साझा किया जा सकता है।

if RUBY_PLATFORM =~ /(win32)|(i386-mingw32)/ 
    gem 'mongrel','1.2.0.pre2' 
else 
    gem 'unicorn' 
end