如何使用捆绑器在项目中使用 Rails 分支中的分支
-
27-09-2019 - |
题
我有一个叉子 Rails 仓库 在github上,我有一个基于rails-2-3-stable分支的分支。我想与我的应用程序一起基于 Rails 2.3.10 进行一些更改。我们使用捆绑器,并且该应用程序使用 SVN 进行版本控制。
在 Rails 的 github 分支中使用我的分支并跨机器共享的最干净的方法是什么?
一种方法是这样的:
这可以工作,但感觉不够干净,因为当存储库更改时,我们必须手动更新供应商版本,并且我们必须将 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
, ,但是启动应用程序时,它在加载路径中找不到rails:
/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)!
解决方案
巴鲁的回答为我指明了正确的方向,但这里有更多细节:
有必要为 Rails repo/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
请注意,您不能使用“railties”,它仅定义“rails”gem。
顺便说一句,在处理此问题时,将 Gemfile 指向我的本地存储库要容易得多,这是通过这种方式完成的(rails 是克隆存储库的文件夹,比 Gemfile 低一级):
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在相应的Rake文件指定。
否则你可以使用:
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
编辑:这意味着,打捆要求gemspec要到位。