Saya cukup baru mengenal bundler dan capistrano, dan saya mencoba menggunakannya bersama. Ketika saya mencoba menerapkan, saya mendapatkan pesan:
Anda mencoba menginstal dalam mode penerapan setelah mengubah Gemfile Anda. Jalankan `bundle install 'di tempat lain dan tambahkan Gemfile.lock yang telah diperbarui ke kontrol versi.
Saya tidak tahu bagaimana memuaskan sistem yang mengeluh, dan saya tidak mengerti mengapa keluhan itu muncul karena saya membaca di dokumen :
Jika Gemfile.lock memang ada, dan Anda telah memperbarui Gemfile (5) Anda, bundler akan menggunakan dependensi di Gemfile.lock untuk semua permata yang tidak Anda perbarui, tetapi akan menyelesaikan kembali dependensi permata yang Anda perbarui . Anda dapat menemukan informasi lebih lanjut tentang proses pembaruan ini di bawah PEMBARUAN KONSERVATIF.
Saya menafsirkannya sebagai Bundler dapat menangani fakta bahwa Gemfile saya tidak seperti yang diharapkan. Ada bantuan?
Spesifikasi: Ruby 1.9.3, Rails 3.2.3, Capistrano 2.12.0, Bundler 1.1.4, Windows 7, diterapkan ke mesin Posix.
Sunting: Gemfile saya menyertakan blok logika seperti berikut:
unless RbConfig::CONFIG['host_os'] === 'mingw32'
# gem 'a' ...
end
sumber
unless RbConfig::CONFIG['host_os'] === 'mingw32'
? (Ergo itu harus menggabungkan item yang berbeda di komputer windows saya daripada di server linux.):platforms
bendera untuk permata yang diperlukan server prod (posix) saya tetapi yang tidak ada di server dev (win) saya membuat perbedaan:platforms :ruby do; gem 'mygem'; ...; end
(Anda mendapatkan centang hijau jika Anda tidak keberatan menambahkan instruksi ini ke jawaban Anda.):require
, bekerja dengan baik juga stackoverflow.com/a/16475580/933358vi. bundle / config
ubah opsi BUNDLE_FROZEN dari '1' menjadi '0'
lakukan "bundle install"
ATAU
jalankan "bundle config"
lihat apakah nilai "beku" adalah benar setel ke salah
bundle config frozen false
sumber
bundle config frozen false
adalah perbaikan goto saya. Terima kasih banyak, dua tahun berlalu! Saya yakin jawaban Joshua Pinter menjawab komentar di atas - bisa jadi konfigurasi Bundler global yang memengaruhi hal ini.bundle config frozen false
tidak melakukan apa pun untukku. Menggunakan pengeditan .bundle / config di mana entri BUNDLE_FROZEN = "true" (tekstual benar)Hati-hati dengan konfigurasi Bundler global.
Saya memiliki konfigurasi global pada lingkungan dev
~/.bundle/config
saya yang tidak saya miliki di lingkungan CI / Produksi saya yang menyebabkan konfigurasiGemfile.lock
yang dibuat di lingkungan dev saya berbeda dari yang ada di lingkungan CI / Produksi saya.Dalam kasus saya, saya disetel
github.https
ke true di lingkungan dev saya tetapi tidak memiliki konfigurasi seperti itu di lingkungan CI / Produksi saya. Hal ini menyebabkan keduaGemfile.lock
file tersebut berbeda.sumber
Ketika Anda melihat yang berikut ...
$ 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) . . .
... Kemudian, masalahnya kemungkinan besar Anda memiliki file .gem yang kedaluwarsa di direktori vendor / cache Anda.
Mungkin, Anda sebelumnya menjalankan
$bundle install --deployment
yang menyimpan beberapa file .gem "usang" di cache?Bagaimanapun, Anda dapat melewati kesalahan ini dengan menjalankan:
bundle install --no-deployment
Itulah salah satu dari banyak hal hebat tentang Rails ... pesan kesalahan sering kali memberi tahu Anda apa yang harus dilakukan untuk memperbaiki masalah.
sumber
Masalah khusus saya terkait dengan apa yang dilaporkan oleh @JoshPinter, yaitu perbedaan host dev-vs-deploy dalam protokol yang digunakan oleh bundler untuk mengambil permata dari github.
Singkatnya, yang harus saya lakukan hanyalah memodifikasi
Gemfile
entri berikut ...gem 'activeadmin', github: 'activeadmin'
... untuk sintaks aman ini ( lihat referensi ):
gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'
Dan penerapan saya kembali normal.
sumber
Solusi bagi saya sedikit berbeda dari yang lain yang tercantum di sini. Saya mencoba meningkatkan dari sidekiq ke sidekiq-pro (yang membutuhkan bundler 1.7.12+), tetapi saya terus mendapatkan pesan "Anda mencoba menginstal dalam mode penerapan setelah mengubah Gemfile Anda" dari travis-ci
Memeriksa output konsol dari travis-ci mengungkapkan bahwa versi bundler yang lebih lama sedang digunakan.
Dalam kasus saya, saya harus mengedit file travis.yml untuk menambahkan:
before_install: - gem update bundler
Ini memaksa travis-ci untuk menggunakan versi bundler terbaru, dan membuat pesan kesalahan hilang.
sumber
cap shell
dangem update bundler
atauwith <role> gem update bundler
atauon <machine> gem update bundler
Saya tidak peduli. Inilah yang saya lakukan. Itu memperbaikinya.
rm -rf .bundle rm -rf Gemfile.lock bundle install
sumber
rm -fr .bundle
Memperbaiki masalah untuk saya.
sumber
Penyebab kesalahan lainnya:
Ini agak bodoh, tapi saya yakin orang lain akan melakukan kesalahan yang sama.
Untuk Rails 4, Heroku menambahkan permata rails_12factor. Jika Anda menggunakannya sebelum mereka menambahkannya, maka Anda akan memiliki dua permata ini:
gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
Anda harus menghapusnya saat menambahkan yang baru. (mereka termasuk). Saya pikir Anda bisa lolos sampai Anda menyentuhnya di file permata Anda, kemudian Heroku memperhatikan duplikasi dan berteriak dengan kesalahan di atas.
semoga berhasil dengan Rails 4.
sumber
Saya mengalami hal serupa sebelumnya. Salah satu cara untuk memperbaikinya, saya pikir, tetapi mungkin memakan lebih banyak ruang di server Anda daripada yang Anda inginkan, adalah dengan menjalankannya
bundle install --deployment
lalu coba terapkan. Ini melakukan sesuatu seperti menginstal semua permata Anda ke dalam folder vendor, yang menurut saya secara umum baik untuk dihindari ... tetapi mungkin masih akan berfungsi. Aplikasi saya dulu berperilaku seperti ini, solusi saya adalah menghapus versi yang tepat untuk diunduh dari dalam Gemfile saya, lalu menggulung ulang dan menerapkan.
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'
untuk
gem 'rails_admin'
Atau Anda dapat melakukan apa yang disarankan, dan Git proyek Anda dari server produksi ke mesin lokal, menggabungkannya, dan kemudian memasukkannya kembali ke server Anda. Solusi ini mungkin tidak 100% benar tetapi beberapa di antaranya berhasil untuk saya ... hanya berpikir saya akan berbagi. Semoga berhasil
sumber
--deployment
bendera tidak membuat perbedaan kecuali aku menghapus Gemfile.lock. Apakah seharusnya seperti itu?Dalam kasus kami, kami menggunakan fitur yang tidak tersedia di versi lama bundler yang berjalan di mesin produksi kami. Oleh karena itu cukup mengupgrade bundler, yaitu do a
gem update bundler
.sumber
Ini mungkin ide yang berbahaya, tetapi jika benar-benar harus menguji sesuatu di lingkungan penerapan produksi, Anda dapat mengedit file .bundle / config
# This value is normally '1' # Set it to '0' BUNDLE_FROZEN: '0'
Sekarang panggil bundel, dalam kasus saya, saya perlu memperbarui permata tertentu, jadi ini perintah saya
RAILS_ENV=production bundle update <whatever gem>
Anda mungkin harus mengubahnya kembali setelah pembaruan, sehingga semuanya berfungsi seperti yang Anda harapkan, setelahnya. Sekali lagi, ini mungkin tidak didukung, dan YMMV
sumber
Saya mengalami ini saat menerapkan aplikasi Nesta setelah beberapa pembaruan permata. Apa yang berhasil bagi saya adalah menghapus Gemfile.lock , menjalankannya
bundle install
untuk membuatnya kembali, dan menerapkannya lagi.sumber
Aku berlari ke dalam masalah yang sama namun aku baik
bundle install
danbundle update
dan Heroku masih menolak dorongan saya.Saya memperbaiki masalah ini hanya dengan menghapus Gemfile.lock dan menjalankannya
bundle install
kembali. Saya kemudian menambahkan, berkomitmen, dan mendorongnya ke git repo saya. Setelah itu saya tidak mengalami masalah untuk mendorong ke Heroku.sumber
untuk heroku, Anda tidak perlu mengubah sintaks di file
Gemfile
. Anda bisa menambahkanBUNDLE_GITHUB__HTTPS
(perhatikan garis bawah ganda) sebagai variabel lingkungan dan setel ketrue
(di dasbor aplikasi heroku Anda di bawahSettings
tab diConfig Vars
bagian). ini akan mengalihkan protokol darigit://
menjadihttps://
untuk semua permintaan semacam itu.sumber
Saya mendapat pesan kesalahan saat mencoba mengirim ke Heroku. Saya menemukan solusi berikut diperbaiki.
sumber
Masalah ini dapat terkait dengan submodul yang menunjuk ke kode versi lama. Bagi saya, saya menyelesaikan masalah ini dengan memperbarui submodul saya
Jika Anda memiliki submodul, coba jalankan:
git submodule update --init
bundle install
sumber
Setelah perintah ini, Anda dapat melakukan penginstalan bundel normal Anda lagi:
bundle install --no-deployment
sumber
Saya membaca selusin solusi tentang sumber daya yang berbeda tetapi tidak menemukan secara tepat apa yang dapat membantu saya dalam situasi ini
Jadi saya menemukan solusi. Tepatnya mengatakan saya membaca pesan kesalahan dengan penuh perhatian dan ada solusi: Jalankan pemasangan bundel di tempat lain . "Di tempat lain" adalah Cloud9 saya tempat saya mengembangkan aplikasi. Jadi langkah saya
rsync
perintahbundle install
. dalam hal ini Anda akan memiliki versi Gemfile.lock yang telah diubahrsync
bundle install --deployment --without development test
SELESAI! Semoga beruntung untuk semua!sumber