安装gem以用作在Travis上构建python项目的工具

时间:2016-06-05 09:03:23

标签: ruby travis-ci

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

1 个答案:

答案 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_HOMEGEM_PATH,因此gembundler等命令将使用正确的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设置吗?