1

我试图让 TeamCity 在我的 rails 应用程序上运行测试,但它没有看到 rspec

rspec: command not found

我创建了一个“命令行”构建步骤,其中包含以下内容:

rspec spec/

如果我在生成的目录中打开终端,在构建步骤失败后,我可以毫无问题地运行测试,这表明我在 TeamCity 环境设置中做错了(与项目代码相反) .

我认为问题在于它无法切换到正确的 ruby​​ 版本(我使用 rvm 进行我的 ruby​​ 版本管理)。为了演示到目前为止我所做的调试,我将“命令行”构建步骤更改为以下内容:

echo '#do rspec spec/'    
rspec spec/    
echo '#which rspec?'    
echo `which rspec`    
echo '#do bundle update'    
bundle update    
echo '#which ruby are we using?'    
echo `which ruby`    
echo '#which ruby do we want?'    
echo `more Gemfile | grep "ruby "`    
echo '#which bundle are we using?'    
echo `which bundle`    
echo '#available rubies?'    
echo `rvm list`    
echo '#switch to the right ruby: ruby-2.1.1'    
rvm use ruby-2.1.1    
echo '#try making rvm a function'    
source "$HOME/.rvm/scripts/rvm" &&     echo "rvm sourced."    
echo '#Try switching again'    
rvm use ruby-2.1.1    

结果输出是:

#do rspec spec/
/Users/tom/Desktop/TeamCity/buildAgent/temp/agentTmp/custom_script8352199801919263311: line 2: rspec: command not found
#which rspec?

#do bundle update
Your Ruby version is 2.1.2, but your Gemfile specified 2.1.1
#which ruby are we using?
/Users/tom/.rvm/rubies/ruby-2.1.2/bin/ruby
#which ruby do we want?
ruby "2.1.1"
#which bundle are we using?
/Users/tom/.rvm/gems/ruby-2.1.2@global/bin/bundle
#available rubies?
rvm rubies ruby-2.1.1 [ x86_64 ] =* ruby-2.1.2 [ x86_64 ] # => - current # =* - current && default # Gemfile Gemfile.lock Guardfile Procfile README.rdoc Rakefile app bin config config.ru db docs latest.dump lib log public scripts spec ssl vendor - default
#switch to the right ruby: ruby-2.1.1
RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

#try making rvm a function
rvm sourced.
#Try switching again
RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

Process exited with code 0

我已经阅读了数十个 stackoverflow 答案和博客,但仍然没有运气。有什么想法我可以尝试下一步吗?(我还没有找到让 teamcity 使用登录 shell 的方法)。

4

2 回答 2

2

我找到了另一个(可能更好)的解决方案。

事实证明,您可以添加一个名为“Ruby Environment Configurator”的“构建功能”,它将一个 Ruby 解释器传递给所有构建步骤。

添加构建功能: http ://confluence.jetbrains.com/display/TCD8/Adding+Build+Features

配置 Ruby 环境配置器: http ://confluence.jetbrains.com/display/TCD8/Ruby+Environment+Configurator

于 2014-06-07T11:59:30.763 回答
1

这里有三个选项:

  • 您可以通过使用 Rake 运行器而不是命令行运行器来回避该问题。Rake runner 对 RVM 有特定的支持。将“Ruby 解释器”“模式”设置为 RVM,您可以指定解释器和 gemset。这是最简单的。

  • 您可以通过将 Command Executable 设置为所需的 Ruby 解释器中 rspec 可执行文件的完整路径(在您的 ~/.rvm 中),并将 PATH、GEM_HOME、GEM_PATH 和 BUNDLE_PATH 环境变量设置为指向那个解释器。此处的详细信息:https ://rvm.io/integration/teamcity这将是更多的工作。

  • 您可以通过将 Command Executable 设置为 'bash' 并将 Command Parameters 设置为 '--login -c "rvm use 2.1.1; rspec spec"' 来让命令行运行器工作。虽然没试过。

于 2014-06-02T14:06:03.100 回答