【问题标题】:How to use a branch in a fork of rails in a project with bundler如何在带有捆绑器的项目中使用分叉中的分支
【发布时间】:2011-05-01 21:09:22
【问题描述】:

我在 github 上有一个 rails repo 的分支,其中我有一个基于 rails-2-3-stable 分支的分支。我想与我的应用程序一起基于 rails 2.3.10 开发一些更改。我们正在使用捆绑程序,并且该应用程序使用 SVN 进行版本控制。

在 github fork of rails 中使用我的分支并跨机器共享的最干净的方法是什么?

一种方法是:

how do I install edge rails?

这可行,但感觉不够干净,因为我们必须在 repo 更改时手动更新 vendored 版本,并且我们必须将 git repo 检入 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) 来自 /home/mt/Development/config/boot.rb:57:in `load_initializer' 来自 /home/mt/Development/config/boot.rb:117:in `run' 来自 /home/mt/Development/config/boot.rb:11:in `boot!' 来自/home/mt/Development/config/boot.rb:130 从脚本/控制台:2:在`re

我的 Gemfile.lock 条目是这样的:

胃肠道 远程:git://github.com/traveliq/rails.git 修订:25139ac92cea5b17791d71359bc3ae2a5d526652 分支:tiq-fixes 眼镜: 导轨 (2.3.10) ... 依赖项 ... 导轨(= 2.3.10)!

【问题讨论】:

  • 用 Gemfile.lock 摘录更新了问题

标签: ruby-on-rails ruby github bundle bundler


【解决方案1】:

balu 的回答为我指明了正确的路线,但这里有更多细节:

有必要为 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,并让 bundler 使用 gemcutter 等通常可用的版本。

【讨论】:

    【解决方案2】:

    看起来在 2.3.10 版本中,rails 的组件没有 .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

    编辑:这意味着捆绑器需要一个 gemspec 到位。

    【讨论】:

    • 感谢您将我指向捆绑器 git 文档,不知道除了“入门”文档之外还有更多内容。但是,我仍然收到此错误:在 git://github.com/traveliq/rails.git (在 tiq-fixes)中找不到 gem 'actionpack (>= 0, runtime)'。源不包含任何版本的 'actionpack (>= 0, runtime)'
    • 好吧,我认为你的答案是:不可能使用 bundler 和 rails 2.3.x 开箱即用。但我想我可以将分支中的 .gemspec 文件添加到依赖项中?
    • 是的。只需从 gem 目录中的 Rakefile 复制它即可。
    • 如果你投票给我并标记为正确答案会很好。 :)
    • 对不起,我还在努力,所以我不知道它是否真的正确。没有忘记你:)
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2017-06-26
    • 2015-09-02
    • 2014-05-29
    • 2022-12-13
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多