我同时开发了两个Ruby宝石,其中一个取决于另一个宝石。说我的宝石名字是" foo" &" 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"是,并计为"已安装"。这可能吗?
答案 0 :(得分:1)
这个技巧是使用bundler完成的。
让我们说gem foo 取决于gem bar 。然后在foo的Gemfile中,使用bundler&#39> 路径选项指向gem bar :
gem "bar", path: "/home/wayne/lab/bar"
然后bundle install
之后,bundle exec rspec
,bundle exec rake features
等命令将使用gem" bar"超出您的本地文件夹。
完成后,将Gemfile中的gem "bar"
行恢复为正常格式。
如果要永久保留Gemfile修改,您有几个选项。一个是通过修改来检查它。根据{{3}},Bundler将首先尝试从本地路径加载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
答案 1 :(得分:0)
您无法在.gemspec中执行此操作,请将其设置为以下代码
gem 'gem_name', path: 'full/path/to/your_gem'
在我的exp中,它是同时开发两个gem的最佳方式,如果你将一个gem上传到rubygems.org,你可以使用s.add_runtime_dependency "foo", "~> 0"
,但如果你想改变gem&#34 ; FOO"代码,并在另一个项目中更新,您需要再次运行bundle install
。这样做非常浪费时间。