【发布时间】:2011-05-28 03:22:23
【问题描述】:
我希望 Bundler 加载本地 gem。有选择吗?还是我必须将 gem 文件夹移动到 .bundle 目录中?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 rubygems bundler
我希望 Bundler 加载本地 gem。有选择吗?还是我必须将 gem 文件夹移动到 .bundle 目录中?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 rubygems bundler
您可以参考 gem 的来源:
source: 'https://source.com', git repository (:github => 'git/url')
并带有本地路径
:path => '.../path/gem_name'.
您可以了解更多关于 [Gemfiles 以及如何使用它们] (https://kolosek.com/rails-bundle-install-and-gemfile) 在这篇文章中。
【讨论】:
我相信你可以做到:
gem "foo", path: "/path/to/foo"
【讨论】:
spring stop 看看是否确实是问题所在。
除了指定路径(正如 Jimmy 所提到的)之外,您还可以通过使用以下配置选项强制 Bundler 为您的环境使用本地 gem:
$ bundle config local.GEM_NAME /path/to/local/git/repository
如果您同时开发两个 gem 或一个 gem 和一个 rails 应用程序,这将非常有用。
但请注意,这仅在您已经使用 git 作为依赖项时才有效,例如:
# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'
# In your terminal
$ bundle config local.rack ~/Work/git/rack
如在the docs 上看到的那样。
【讨论】:
BUNDLE_PATH(构建一个分发包)。在执行您的建议或 Jimmy 的回答时,它只执行 using,而不是实际安装到我的 BUNDLE_PATH 文件夹中。我无法弄清楚这一点,有什么帮助吗?
bundle config --delete local.GEM_NAME
bundle config disable_local_branch_check true 否则 Bundler 会抱怨该分支。不过要小心这一点,因为检查应该阻止不正确的提交进入Gemfile.lock。这里的文档:bundler.io/v1.12/git.html
要在 Rails 项目中使用本地 gem 存储库,请按照以下步骤操作:
检查你的gem文件夹是否是git仓库(命令在gem文件夹中执行)
git rev-parse --is-inside-work-tree
获取仓库路径(命令在gem文件夹中执行)
git rev-parse --show-toplevel
为 Rails 应用程序设置本地覆盖
bundle config local.GEM_NAME /path/to/local/git/repository
其中GEM_NAME 是您的gem 的名称,/path/to/local/git/repository 是点2 中命令的输出
在您的应用程序Gemfile 中添加以下行:
gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
运行bundle install 应该会给出这样的结果:
Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository)
GEM_NAME 是您的 gem 的名称,/path/to/local/git/repository 从点 2 开始
最后,运行bundle list,而不是gem list,你应该会看到如下内容:
GEM_NAME (0.0.1 5a68b88)
GEM_NAME 是您的 gem 的名称
我观察到的几个重要案例:
Rails 4.0.2
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
Ubuntu 13.10
RubyMine 6.0.3
【讨论】:
如果你也想要分支:
gem 'foo', path: "point/to/your/path", branch: "branch-name"
【讨论】:
Only gems with a git source can specify a branch.
如果您碰巧正在使用它,也可以使用 git 引用本地 gem。
gem 'foo',
:git => '/Path/to/local/git/repo',
:branch => 'my-feature-branch'
然后,如果它发生变化,我会运行
bundle exec gem uninstall foo
bundle update foo
但我不确定每个人都需要运行这两个步骤。
【讨论】:
bundle uninstall <gem> && bundle install ,对于您希望反映在您的应用