我正在编写一个简单的食谱来创建文件:
file '/myfile' do
content 'Welcome to Technical Guftgu'
action :create
end
但是在 Chef-client -zr "recipe[test::recipe1]" 上,我收到以下错误:
[2022-03-08T10:54:16+00:00] ERROR: Running exception handlers
Running handlers complete
[2022-03-08T10:54:16+00:00] ERROR: Exception handlers complete
Chef Infra Client failed. 0 resources updated in 02 seconds
[2022-03-08T10:54:16+00:00] FATAL: Stacktrace dumped to /home/vagrant/.chef/local-mode-cache/cache/chef-stacktrace.out
[2022-03-08T10:54:16+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2022-03-08T10:54:16+00:00] FATAL: Errno::EACCES: file[/myfile] (test::recipe1 line 7) had an error: Errno::EACCES: Permission denied @ rb_sysopen - /myfile
您的应用程序似乎无权访问该文件
/myfile
。
尝试此操作,以允许访问所有内容:
sudo chmod a+rw /myfile
Errno 类映射到运行时的系统调用错误。您可以在以下位置找到此(令人困惑的)记录:
特别是:
Errno.constants.include? :EACCES
#=> true
在大多数 *nix 系统上,Errno::EACCES 映射到 libc 错误代码,表示“权限被拒绝”。具体来说:
Macro: int EACCES
"Permission denied." The file permissions do not allow the attempted operation.
这通常意味着您的 #create 操作没有权限读取、写入或遍历您尝试管理的文件的路径,因此您需要更改您的实现(您在原始帖子中没有显示)确保您的 Ruby 进程具有执行请求的操作所需的文件或文件系统权限。
您似乎没有以 root 用户身份执行此操作,请通过键入 sudo su 将其更改为 root,然后重新运行该命令,希望这会有所帮助。
我遇到了同样的问题,卡住了一个小时,就这样做并成功了。