Bundler を使用したプロジェクトで Rails のフォーク内のブランチを使用する方法
-
27-09-2019 - |
質問
のフォークを持っています レールリポジトリ github には、rails-2-3-stable ブランチに基づいたブランチがあります。私のアプリと一緒に、Rails 2.3.10に基づいていくつかの変更を開発したいと考えています。バンドラーを使用しており、アプリは SVN でバージョン管理されています。
Rails の github フォークでブランチを使用し、これをマシン間で共有する最もクリーンな方法は何ですか?
1 つの方法は次のとおりです。
これは機能しますが、リポジトリが変更されたときにベンダーのバージョンを手動で更新する必要があり、git リポジトリを svn にチェックインする必要があるため、十分にクリーンとは言えません。
Gemfile でこれのバリエーションを試してみました。
gem 'rails', '2.3.10', :git => 'git://github.com/traveliq/rails.git', :branch => 'tiq-fixes'
gem 'rails', '2.3.10', :git => 'git://github.com/traveliq/rails.git', :tag => 'v2.3.10'
gem 'rails', '2.3.10', :git => 'git://github.com/rails/rails.git', :tag => 'v2.3.10'
これらはすべて、実行時に最初は機能します bundle install
, しかし、アプリを起動すると、ロードパスでレールが見つかりません。
/home/mt/Development/config/boot.rb:57:in `require': no such file to load -- initializer (LoadError) from /home/mt/Development/config/boot.rb:57:in `load_initializer' from /home/mt/Development/config/boot.rb:117:in `run' from /home/mt/Development/config/boot.rb:11:in `boot!' from /home/mt/Development/config/boot.rb:130 from script/console:2:in `re
私の Gemfile.lock エントリは次のようになります。
GIT remote: git://github.com/traveliq/rails.git revision: 25139ac92cea5b17791d71359bc3ae2a5d526652 branch: tiq-fixes specs: rails (2.3.10) ... DEPENDENCIES ... rails (= 2.3.10)!
解決
balu の答えは私に正しい道を示してくれましたが、さらに詳細は次のとおりです。
Rails リポジトリ/2-3-stable ブランチ内のほとんどの gem については、.gemspec ファイルをまとめてまとめる必要がありました。私の見解は、次の場所で確認またはフォークできます。 http://github.com/traveliq/rails/commit/46d9042c9125abbbedfc672f8523d81210f4f320
これを Gemfile に含めるには、次を使用します。
git "git://github.com/traveliq/rails.git", :branch => 'tiq-fixes' do
gem 'rails'
gem 'actionmailer'
gem 'actionpack'
gem 'activerecord'
gem 'activeresource'
gem 'activesupport'
end
「rails」gem のみを定義する「railties」は使用できないことに注意してください。
ちなみに、これに取り組んでいる間、Gemfile をローカル リポジトリに指定する方がはるかに簡単でした。これは次の方法で行われます (rails は、Gemfile の 1 レベル下のリポジトリが複製されるフォルダーです)。
gem 'rails', :path => 'rails/railties'
gem 'actionmailer', :path => 'rails/actionmailer'
gem 'actionpack', :path => 'rails/actionpack'
gem 'activerecord', :path => 'rails/activerecord'
gem 'activesupport', :path => 'rails/activesupport'
Rails/Railties .gemspec を定義した後、それらの gem の一部を省略し、gemcutter などから通常利用可能なバージョンをバンドラーに使用させることもできます。
他のヒント
バージョン2.3.10のように見えますが、レールは、そのコンポーネントの.gemspecファイルを持っていませんでした。 代わりに、各gemspec対応するRakefileで指定されます。
それ以外の場合は、あなたが使用することになります:
git "git://github.com/traveliq/rails.git", :branch => 'tiq-fixes', :tag => 'v2.3.10' do
gem 'actionpack'
gem 'activesupport'
gem 'activerecord'
gem 'activemodel'
gem 'actionmailer'
gem 'railties'
end
また参照: http://gembundler.com/git.html の
EDIT:バンドラーが所定の位置にあることがgemspecを必要とするということを意味します。