TL; DR如何在Travis上为非ruby(主要是Python)项目安装Ruby gem,这样我就可以使用gem提供的可执行文件作为构建系统的一部分。
我正在尝试安装一个Ruby gem,用于在我的python project中构建一些额外的东西,在测试后和部署之前。具体来说,我想使用github-changelog-generator为我自动生成更改日志。
似乎我无法安装到root,因为Travis上新的容器化版本不允许sudo
。
我尝试使用gem install --user-install github_changelog_generator
进行安装。最初,只是在运行command not found
时出现github_changelog_generator
错误。
在运行export PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
之前尝试github_changelog_generator
会产生以下结果:
/home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:315:in `to_specs': Could not find 'github_changelog_generator' (>= 0) among 14 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/home/travis/.rvm/gems/ruby-1.9.3-p551:/home/travis/.rvm/gems/ruby-1.9.3-p551@global', execute `gem env` for more information
from /home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:324:in `to_spec'
from /home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_gem.rb:64:in `gem'
from /home/travis/.gem/ruby/1.9.1/bin/github_changelog_generator:22:in `<main>'
from /home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in `eval'
from /home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in `<main>'
这对我来说有点发现它但不太明白。
毫无疑问,对于拥有比我更多Ruby经验的人来说,这是显而易见的。
目前的travis yaml片段如下:
after_success:
- gem install --user-install github_changelog_generator
- export PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
- github_changelog_generator -u pyFFTW -p pyFFTW
答案 0 :(得分:3)
<强>更新强>
我没有意识到RVM没有在Python项目上初始化,因此修复是让RVM设置环境,例如通过安装Ruby版本(而不是容器中的默认1.9.3):
before_install:
- rvm get stable --auto-dotfiles
- rvm install 2.3.1
或者,如果你想要RVM Ruby的默认版本:
before_install:
- rvm default
或者,如果您只想在构建成功时安装RVM(例如,您经常会遇到Travis故障):
after_success:
- rvm default
RVM会为您设置GEM_HOME
和GEM_PATH
,因此gem
和bundler
等命令将使用正确的Ruby和路径。
(之前的答案如下 - 对调试仍然有用)
如果你正在安装宝石,PATH并不是唯一一个定位和加载宝石的重要变量。您还需要正确设置GEM_HOME和GEM_PATH。
如果有疑问,请在gem install
运行gem env
之前,这将显示整个当前宝石环境(安装宝石,PATH是什么,等等)。您还可以运行gem list
来验证gem是否已正确安装并可用。 gem contents github_changelog_generator
会准确显示文件的安装位置。
如果粘贴输出,则显而易见的是需要更改的内容。
Travis还使用bundler来加载gems,所以如果你有一个Gemfile
并且那个gem不在Gemfile
中,那么在某些情况下它可能会被忽略。
同样,从gem env
出来应该提供关于python项目/容器上Ruby环境的样子的线索。
BTW,.travis.yml文件的其余部分是什么样的?你有language
套吗?你有sudo: false
设置吗?