Bagaimana cara menentukan file .gem lokal di Gemfile saya?
158
Saya memiliki beberapa file permata yang saya instal melalui gem install xx.gem. Bisakah saya memberi tahu Bundler untuk menggunakannya? Atau apakah saya harus menentukan jalur sumber?
Ini bukan semata-mata jawaban untuk pertanyaan Anda tentang menginstal .gempaket, tetapi Anda dapat menentukan semua jenis lokasi berdasarkan permata-demi-permata dengan mengedit Gemfile Anda .
Menentukan :pathatribut akan memasang permata dari jalur itu di mesin lokal Anda.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Sebagai alternatif, menentukan :gitatribut akan menginstal permata dari repositori git jarak jauh.
gem "foreman", git:"git://github.com/pje/foreman.git"# ...or at a specific SHA-1 ref
gem "foreman", git:"git://github.com/pje/foreman.git", ref:"bf648a070c"# ...or branch
gem "foreman", git:"git://github.com/pje/foreman.git", branch:"jruby"# ...or tag
gem "foreman", git:"git://github.com/pje/foreman.git", tag:"v0.45.0"
Juga untuk beberapa firewall, protokol git mungkin menjadi masalah. Jika demikian, cobagem "foreman", :git => "https://github.com/pje/foreman.git"
kode
61
Tampaknya bundler tidak dapat menggunakan file .gem di luar kotak. Menunjuk jalur: ke direktori yang berisi file .gem tidak berfungsi. Beberapa orang menyarankan untuk menyiapkan server permata lokal (geminabox, stickler) untuk tujuan itu.
Namun, yang saya temukan jauh lebih sederhana adalah dengan menggunakan permata "server" lokal dari sistem file: Cukup masukkan file .gem Anda di direktori lokal, lalu gunakan "gem generate_index" untuk menjadikannya repositori Gem
Terima kasih! Juga, saya membutuhkan tebasan ketiga untuk melakukan "file: /// Absolute / Path / to / repo"
Anna
5
Bukankah lebih mudah untuk menjalankan "server permata" pada baris perintah dan menambahkan sumber " localhost: 8808 " ke Gemfile Anda
Anna
Ini benar-benar keren, Martin! Terima kasih telah berbagi, persis seperti yang saya cari karena saya tidak ingin bergantung pada menjalankan gem serveratau saya ingin meng-host seluruh proyek, hanya file .gem.
Leo Gallucci
6
Kiat bonus: Anda dapat memenuhi persyaratan jalur absolut dengan menggunakan File.expand_path seperti inisource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci
Tidak bekerja untuk saya. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon
44
Saya akan membongkar permata Anda di folder vendor aplikasi
Secara default Bundler akan memeriksa sistem Anda terlebih dahulu dan jika tidak dapat menemukan permata, ia akan menggunakan sumber yang ditentukan dalam Gemfile Anda.
Benar. tetapi bagaimana jika saya belum menginstalnya sebelumnya (ketika saya menggunakan ke server) Tidak dapat menemukan Imlib2-Ruby-0.5.2 di salah satu sumber perintah selesai
ddayan
184
Anda dapat menunjuk ke direktori lokal dengan gem "gemname",: path => "~ / some / local / path"
JHurrah
5
Saya berpikir bahwa: path memerlukan folder gem dengan file gemspec. Saya hanya punya file .gem yang ingin saya instal.
ddayan
1
Ok jadi cap deploy sudah lewat, tetapi permata itu tidak diinstal "Tidak ada file seperti itu untuk memuat - vips": /
ddayan
4
Itu jelas tidak benar, setidaknya lebih lama. Bundler tidak melihat permata sistem Anda, dan hanya berjalan dengan apa yang ada di Gemfile. Salah satu alasannya sangat mengerikan.
bioneuralnet
6
Anda dapat memaksa bundler untuk menggunakan permata yang Anda gunakan menggunakan "paket bundel" dan "bundel instal --local"
Di mesin pengembangan Anda:
bundle install
(Menginstal permata yang diperlukan dan membuat Gemfile.lock)
bundle package
(Tembolok permata di vendor / cache)
Di server:
bundle install --local
(--local berarti "gunakan permata dari vendor / cache")
Bagaimana jika saya tidak dapat menginstal apa pun di server? Dalam hal ini, saya perlu membangun dengan menyapu tetapi server tidak memiliki permata yang saya gunakan untuk membangun; tapi saya tidak punya masalah memeriksa dependensi.
Henrik
"bundle install" tidak berfungsi untuk saya jika permata itu tidak termasuk dalam sumber Gemfile yang ada "
Anna
Hapus saja file permata untuk sementara dari file permata sebelum melakukannya. bundle installSetelah itu, salin file permata ke vendor / cache , tambahkan file permata kembali ke file permata dan jalankan bundle install --local
bert bruynooghe
1
bundle packageadalah saran yang bagus, bahkan sekarang, tiga tahun kemudian. Jika versi Bundler Anda lebih lama dari 2.0 (belum dirilis pada penulisan ini), Anda perlu menggunakan bundle package --alljika Anda ingin menyertakan permata dengan pathatau gitdependensi. Ini akan memberi Anda pengingat yang membantu jika mendeteksi dependensi seperti itu.
L2G
1
FYI: ini mungkin tidak berfungsi sebaik yang Anda harapkan jika Anda mengembangkan pada platform yang berbeda dari yang Anda sebarkan (misalnya berkembang di macOS, sebarkan ke Linux). Sesuai --localdokumen: "Perhatikan bahwa jika permata khusus platform yang sesuai ada di rubygems.org, itu tidak akan ditemukan."
Liam Dawson
1
Menambahkan .gemke vendor/cachetampaknya bekerja. Tidak ada opsi yang diperlukan di Gemfile.
Jawaban:
Ini bukan semata-mata jawaban untuk pertanyaan Anda tentang menginstal
.gem
paket, tetapi Anda dapat menentukan semua jenis lokasi berdasarkan permata-demi-permata dengan mengedit Gemfile Anda .Menentukan
:path
atribut akan memasang permata dari jalur itu di mesin lokal Anda.Sebagai alternatif, menentukan
:git
atribut akan menginstal permata dari repositori git jarak jauh.(Seperti @JHurrah disebutkan dalam komentarnya .)
sumber
gem "foreman", :git => "https://github.com/pje/foreman.git"
Tampaknya bundler tidak dapat menggunakan file .gem di luar kotak. Menunjuk jalur: ke direktori yang berisi file .gem tidak berfungsi. Beberapa orang menyarankan untuk menyiapkan server permata lokal (geminabox, stickler) untuk tujuan itu.
Namun, yang saya temukan jauh lebih sederhana adalah dengan menggunakan permata "server" lokal dari sistem file: Cukup masukkan file .gem Anda di direktori lokal, lalu gunakan "gem generate_index" untuk menjadikannya repositori Gem
Akhirnya arahkan bundler ke lokasi ini dengan menambahkan baris berikut ke Gemfile Anda
Jika Anda memperbarui permata di repositori, pastikan untuk membuat ulang indeks.
sumber
gem server
atau saya ingin meng-host seluruh proyek, hanya file .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Saya akan membongkar permata Anda di folder vendor aplikasi
Kemudian tambahkan path pada Gemfile untuk menghubungkan permata yang belum dibongkar.
sumber
Secara default Bundler akan memeriksa sistem Anda terlebih dahulu dan jika tidak dapat menemukan permata, ia akan menggunakan sumber yang ditentukan dalam Gemfile Anda.
sumber
Anda dapat memaksa bundler untuk menggunakan permata yang Anda gunakan menggunakan "paket bundel" dan "bundel instal --local"
Di mesin pengembangan Anda:
(Menginstal permata yang diperlukan dan membuat Gemfile.lock)
(Tembolok permata di vendor / cache)
Di server:
(--local berarti "gunakan permata dari vendor / cache")
sumber
bundle install
Setelah itu, salin file permata ke vendor / cache , tambahkan file permata kembali ke file permata dan jalankanbundle install --local
bundle package
adalah saran yang bagus, bahkan sekarang, tiga tahun kemudian. Jika versi Bundler Anda lebih lama dari 2.0 (belum dirilis pada penulisan ini), Anda perlu menggunakanbundle package --all
jika Anda ingin menyertakan permata denganpath
ataugit
dependensi. Ini akan memberi Anda pengingat yang membantu jika mendeteksi dependensi seperti itu.--local
dokumen: "Perhatikan bahwa jika permata khusus platform yang sesuai ada di rubygems.org, itu tidak akan ditemukan."Menambahkan
.gem
kevendor/cache
tampaknya bekerja. Tidak ada opsi yang diperlukan diGemfile
.sumber
Saya merasa paling mudah untuk menggunakan server gem saya sendiri
geminabox
Lihat instruksi sederhana ini .
sumber