gpt4 book ai didi

ruby - 如何让 Bundler 将本地 gem 视为 "already installed"?

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:00 24 4
gpt4 key购买 nike

我正在同时开发两个 Ruby gem,其中一个依赖于另一个。假设我的 gem 名称是“foo”和“bar”。 “bar”依赖于“foo”,所以它的 gemspec 包括:

s.add_runtime_dependency "foo", "~> 0"
# More dependencies...

还有我的 Gemfile:

source "https://rubygems.org"

gemspec

当然,现在运行 bundle install 会给我一个错误,因为“foo”放在本地文件夹中。

我不想注释掉依赖行,也不想将它指向本地文件夹,因为那将是我永远不会提交到我的 Git 存储库的本地更改.它会占用 git status 下的空间,并且会在我需要修改文件时挡路。

我希望我可以用一些环境变量来做一些技巧,让 Bundler 知道“foo”在哪里,并将其计为“已安装”。这可能吗?

最佳答案

这个技巧是使用 bundler 完成的。

假设 gem foo 依赖于 gem bar。然后在 foo 的 Gemfile 中,使用 bundler 的 path 选项指向 gem bar:

gem "bar", path: "/home/wayne/lab/bar"

然后 bundle install

之后,命令如bundle exec rspec , bundle exec rake features等,将使用本地文件夹中的 gem“bar”。

完成后,还原 gem "bar" Gemfile 中的一行到它的正常形式。


如果您想永久保留对 Gemfile 的修改,您有多种选择。一种是仅通过修改将其 checkin 。根据Gemfile source priority ,Bundler 将首先尝试从本地路径加载 gem,然后回退到从全局源安装它。

如果 gem 是公开的,您的本地修改可能会使克隆您的 gem 的人感到困惑。在那种情况下,由于 Gemfile 只是 ruby​​ 代码,您可以使用例如环境变量来打开您的位置修改:

# When making concurrent modifications to gem "bar",
# use that gem by its local directory.
if ENV['BAR_GEM_PATH']
gem "bar", path: ENV['BAR_GEM_PATH']
end

关于ruby - 如何让 Bundler 将本地 gem 视为 "already installed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com