我正在开发一些私有宝石,我认为我无法正确理解PATH / GEM_PATH和/或Bundler / RVM安装流程,如果有人可以填写,我们会很高兴。
我有一个包含两个宝石的存储库(为简单起见,A& B)。我使用脚手架+按照this bundler tutorial提供的指南开发了宝石。
感谢Bundler项目,我有一些Rakefile任务,如rake build
,rake install
,rake install:local
和rake release
。由于这些宝石的私有性,我无法将它们发布到RubyGems(我们还没有考虑托管我们的rubygems)。
我的计算机使用RVM管理ruby版本和Bundler版本1.15.1
我想做什么:假设一个新的机器/开发人员试用了该项目,理想情况下我们会cd
进入每个子文件夹(目前为2,gem A和gem B) ,运行rake install
然后我们应该为当前用户提供系统范围内的宝石。
发生了什么:宝石已经构建并正常工作,但它们仅在每个宝石的子文件夹中可用,即宝石A仅在子文件夹A中可用,宝石B仅在内部可用子文件夹B.
我尝试了什么:因此,在rake build/install/install:local
之后,.gem
下会生成一个新的pkg
文件。我尝试使用gem install pkg/A.gem
,gem install --local pkg/A.gem
和gem install --local --user-install pkg/A.gem
手动安装“已编译”文件但未成功。 (there are plenty of SO questions/answers about this)
我认为这与PATH变量有关,但正如我之前所说,我不完全理解它们的管理方式。我从这些命令得到以下结果:
# Our gem
> gem which A
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/A-0.1.8/lib/A.rb
# Pry, available globally
> gem which pry
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/pry-0.11.1/lib/pry.rb
我已经迷失和沮丧太长时间了,任何帮助都表示赞赏。也可以听取有关更好的私人宝石安装流程的建议:)
答案 0 :(得分:1)
根据您链接的指南构建您的gem。你最终应该得到一个gem文件。根据需要分发这个(我使用rsync / crontab下载更新的gem版本,但任何事情都有)。用户可以按如下方式安装gem:
gem install --user-install /path/to/your/file.gem
这会将gem安装在用户的~/.gem/ruby/<version>/gems/<your-gem-name>
目录中。
用一个空的宝石(食物,就像在那个示例指南中)尝试它并且它工作正常。但是如果你没有指定--user-install参数,它将尝试在系统ruby目录中安装(/ usr / lib / ruby / gems ...)
答案 1 :(得分:1)
是的,它与您的PATH变量有关。你的安装似乎很好。
我建议您首先确认您的宝石安装路径:
echo $GEM_HOME
仔细检查您的PATH以确保其存在并确认GEM主页也是从rake install
echo $PATH
如果没有,请把它放在你的道路上,你应该没事这样:
echo PATH=$PATH:$GEM_HOME >> ~/.bashrc
source ~/.bashrc