Bagaimana saya bisa menentukan permata lokal di Gemfile saya?

Jawaban:

541

Saya yakin Anda bisa melakukan ini:

gem "foo", path: "/path/to/foo"
Jimmy Cuadra
sumber
10
Jalur hard-coded baik untuk sesi hack cepat, tetapi solusi permata lokal bloudermilk lebih efektif untuk proyek-proyek di bawah kontrol versi. Ini memungkinkan Anda terus memeriksa kedua proyek - permata dan proyek menggunakan permata - sehingga orang lain tidak perlu memeriksa sumber permata atau berbagi jalur yang sama.
mahemoff
4
Anda dapat membuat ini sedikit lebih bersih dengan menggunakan symlink .gitignored ke permata lokal Anda di direktori proyek Anda - dengan cara itu Anda dapat menggunakan kontrol sumber pada kedua proyek secara terpisah dan yang lain dapat melakukan hal yang sama tanpa memiliki struktur direktori yang sama.
Dan
7
Sesuatu yang harus diwaspadai mungkin Spring. Jika Anda menggunakan jalur lokal untuk permata Anda, Anda bisa melihat versi cache permata lokal Anda seperti yang saya lakukan di konsol rel. Jika sepertinya perubahan permata lokal Anda tidak dicoba, coba spring stoplihat apakah memang itu masalahnya.
Jason R
1
Menambahkan jalur permata lokal ke config / spring.rb tampaknya membantu mengambil perubahan permata lokal Anda setelah memulai kembali konsol konsol / server.
Jason R
5
Cara yang lebih baik untuk melakukannya di sini: rossta.net/blog/…
Cyzanfar
230

Selain menentukan jalur (seperti yang disebutkan Jimmy), Anda juga dapat memaksa Bundler untuk menggunakan permata lokal untuk lingkungan Anda hanya dengan menggunakan opsi konfigurasi berikut:

$ bundle config local.GEM_NAME /path/to/local/git/repository

Ini sangat membantu jika Anda mengembangkan dua permata atau permata dan aplikasi rel berdampingan.

Perhatikan bahwa ini hanya berfungsi ketika Anda sudah menggunakan git untuk ketergantungan Anda, misalnya:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

Seperti yang terlihat pada dokumen .

bloudermilk
sumber
Saya mengalami masalah dengan ini karena saya menggunakan BUNDLE_PATH(membangun paket untuk distribusi). Ketika melakukan apa yang Anda sarankan, atau jawaban Jimmy, itu hanya melakukan using, dan tidak benar-benar menginstal ke BUNDLE_PATHfolder saya . Saya tidak dapat menemukan ini, ada bantuan?
Otomatis
2
Perhatikan ini tidak akan berfungsi dengan a permatapec , per diskusi di sini .
davetapley
31
Untuk menonaktifkan penggantian lokal:bundle config --delete local.GEM_NAME
alxndr
Saya harus menghapus versi direktif dari garis permata untuk mendapatkan ini berfungsi.
Epigene
4
Jika Anda ingin menggunakan cabang berbeda dalam pengembangan dari produksi, Anda juga harus menetapkan bundle config disable_local_branch_check trueatau Bundler akan mengeluh tentang cabang. Berhati-hatilah dengan ini, karena cek seharusnya menghentikan komitmen yang salah Gemfile.lock. Documents di sini: bundler.io/v1.12/git.html
Leo
33

Anda juga dapat mereferensikan permata lokal dengan git jika Anda sedang mengusahakannya.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

Kemudian, jika itu berubah saya jalankan

bundle exec gem uninstall foo
bundle update foo

Tetapi saya tidak yakin semua orang perlu menjalankan dua langkah ini.

Rimian
sumber
5
ini hebat, tetapi tidak nyaman jika Anda secara aktif mengembangkan permata ... karena Anda harus melakukan setiap perubahan & bundle uninstall <gem> && bundle install , untuk setiap perubahan yang Anda inginkan tercermin pada aplikasi Anda
Ramses
18

Untuk menggunakan repositori permata lokal dalam proyek Rails, ikuti langkah-langkah di bawah ini:

  1. Periksa apakah folder gem Anda adalah repositori git (perintah dijalankan di folder gem)

    git rev-parse --is-inside-work-tree
  2. Mendapatkan jalur repositori (perintah dijalankan di folder gem)

    git rev-parse --show-toplevel
  3. Menyiapkan override lokal untuk aplikasi rel

    bundle config local.GEM_NAME /path/to/local/git/repository

    di mana GEM_NAMEnama permata Anda dan /path/to/local/git/repositorymerupakan output dari perintah in point2

  4. Di aplikasi Anda Gemfiletambahkan baris berikut:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
  5. Berlari bundle installharus memberikan sesuatu seperti ini:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 

    di mana GEM_NAMEnama permata Anda dan /path/to/local/git/repositorydari titik2

  6. Akhirnya, jalankan bundle list, tidak gem listdan Anda akan melihat sesuatu seperti ini:

    GEM_NAME (0.0.1 5a68b88)

    di mana GEM_NAMEnama permata Anda


Beberapa kasus penting yang saya amati menggunakan:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • Tampaknya RubyMinetidak menampilkan permata lokal sebagai perpustakaan eksternal. Informasi lebih lanjut tentang bug dapat ditemukan di sini dan di sini
  • Ketika saya mengubah sesuatu di permata lokal, untuk dimuat di aplikasi rel saya harus stop/startserver rails
  • Jika saya mengubah versionpermata, stopping/startingserver Rails memberi saya kesalahan. Untuk memperbaikinya, saya menentukan versi permata di aplikasi rel Gemfileseperti ini:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
Gotqn
sumber
0

Anda dapat mereferensikan permata dengan sumber: source: 'https://source.com', git repository (:github => 'git/url')dan dengan jalur lokal :path => '.../path/gem_name'.
Anda dapat mempelajari lebih lanjut tentang Gemfiles dan cara menggunakannya dalam artikel ini.

Nesha Zoric
sumber
-4

Jika Anda ingin cabang juga:

gem 'foo', path: "point/to/your/path", branch: "branch-name"
C Johnson
sumber
Ini tidak berfungsi, menghasilkan kesalahan: Only gems with a git source can specify a branch.
KenB