我的厨师食谱为特定用户在本地安装 Ruby。我想编写一个 InSpec 测试来检查特定版本的 Ruby 是否可用以及是否在没有文档的情况下安装了 gem。
所以很明显,我需要以某种方式代表安装了 rbenv 的用户运行命令。我决定坚持下去sudo su -c
。版本测试正常工作:
describe command('su - rbenv_user -c "ruby -v"') do
its('stdout') {should match ('ruby 2.3.1')}
end
但是当我尝试安装 gem 时:
describe command('su - rbenv_user -c "gem install bundler"') do
its('stderr') {should match ('Successfully installed')}
its('stderr') {should_not match ('Parsing documentation for')}
end
我收到一个错误:
错误:执行 gem 时 ...(Errno::EACCES)权限被拒绝 @ rb_sysopen - /apps/rbenv_user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/bundler-1.15.4 /.codeclimate.yml
我也尝试用su - user -c ...
with替换runuser -l user -c ...
它并导致相同的结果。
我不知道为什么会发生这种情况,以及作为其他用户我必须测试哪些其他选项。