我的Chef cookbook在本地为特定用户安装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 ...
替换runuser -l user -c ...
,这会导致相同的结果。
我不知道为什么会发生这种情况以及我必须测试其他用户的其他选项。