2012-11-13 18 views
6

Gemfile.lock'u devre dışı bırakmamaya dikkat ettim, ancak sorunlara rastladım.Gemfile.lock'u hem windows hem de linux ortamında paylaşma

Windows makinem üzerinde geliştiriyorum ve bir linux (ubuntu) sunucusuna geçiyorum, sorun Bundler'ın bazı mücevherlerin pencere sürümlerini kilitler: sürüm numarasının ardından x86-mingw32 sorunlara neden olur.

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

    PLATFORMS 
    x86-mingw32 

Ben dağıtmak için Capistrano kullanın ve ben bu hatayı alıyorum:

MySQL adaptörü kurun. Gem mysql grubunun parçası değil (activerecord mysql-adaptörü yüklemek Gemfile bunu ekle .)

benim gemfile gibi olsa:

... 
gem 'mysql2' 
... 

Ben Raylar windows versiyonu o kullanmaya çalışır, çünkü bu olduğunu düşünüyorum f mysql2 üzerinde bulunan Gemfile.lock

Bunu çözmek için herhangi bir fikrin var mı?

cevap

6

sonra yüklemek için Gemfile aşağıdaki ardından paket güncelleme

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

Bunun anlamı platformu 'Win32' (Windows) ise (tabii ki listeleme mevcut mysql2 mücevher değiştirin) gibi bir ekleme windows sürümü, diğer tüm Unix sistemleri için 'ruby' olan normal sürümü kurun. En azından çalışamayacak herhangi bir Unix sistemini (Mac OS X'ten Linux'a, Solaris'den * BSD'ye) bilmiyorum.

GÜNCELLEME: Biraz daha fazla bilgi aldım. Sorun şu ki, yalnızcanumaralı bayrağın numaralı kilit bayrağı kilit dosyasına bakıyor. Aksi taktirde -depisyondan vazgeçebilir, Gemfile’nın kendine özgü bir versiyonuna mücevherlerinizi kilitleyebilir ve daha sonra Gemfile’yi tekrar seçmeye zorlamak için bir paket güncellemesini çalıştırabilirsiniz. Sorun, paketin istediğinden emin olmamasıdır çünkü yalnızca --deployment bayrağı kullanılırken kilit dosyasını değerlendirir. Bu, hangi platformun yeniden değerlendirilebileceği anlamına gelmez. Kilit dosyasında kesinlikle gider. Tek gerçek çözüm, gem sürümlerini ana Gemfile'da kilitlemenin ve yeniden değerlendirmeyi zorlamak için güncellemeyi paketlemenin nedeni budur.

Muhtemelen --deployment vazgeçmek olabilir ve sadece size nedeniyle üzerinde dağıttığınız olandan tamamen farklı bir platformda gelişmekte olacağız, bu gibi bir zorunluluktur

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

kullanmak Başvurulan, yollayıcının çalıştığı yol. Yukarıdaki komut, --deployment öğesinin ne yaptığını tam olarak çoğaltmalıdır. Bunların hepsi de .bundle/config dosyasına kaydedilecektir.

+0

Bilgi için teşekkürler! Hala 'bundde/capistrano' – Ryan

+0

'dan gelen yardımcıları kullanırken' --deployment 'devre dışı bırakmanın bir yolu var. Ben şahsen capistrano kullanmıyorum. – ddd

+0

Teşekkürler, yukarıdaki çizgi ile anladım var :) – Ryan

1

Bunu Windows'taki komut isteminde yazarak RUBY_PLATFORM belgesini kontrol edebilirsiniz.

Örneğin, bu Gemfile Windows dizüstü bilgisayarımda ve Linux'ta paylaşılabilir.

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