ruby 如何解决权限被拒绝@ rb_sysopen

clj7thdc  于 2023-08-04  发布在  Ruby
关注(0)|答案(3)|浏览(333)

我写了一个简单的食谱来创建文件如下:

file '/myfile' do
  content 'Welcome to Technical Guftgu'
  action :create
end

字符串
但是在chef-client -zr“recipe[test::recipe 1]”上,我得到以下错误:

[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

siotufzp

siotufzp1#

您的应用似乎无法访问文件/myfile
尝试以下操作,以允许访问所有:sudo chmod a+rw /myfile

p8ekf7hl

p8ekf7hl2#

看起来你不是以root用户的身份执行这个命令,通过输入sudo su将其更改为root,然后重新运行命令,希望这会有所帮助。
我也面临着同样的问题,坚持了一个小时,就这么做了,并成功了。

szqfcxe2

szqfcxe23#

Errno::EACCES表示“权限被拒绝”

Errno类在运行时Map到系统调用错误。你可以在以下文件中找到(令人困惑的):

  • SystemCallError#errno
  • Errno

特别是:

Errno.constants.include? :EACCES
#=> true

字符串
在大多数 *nix系统中Errno::EACCESMap到libc error code,表示“许可被拒绝”。具体而言:

Macro: int EACCES

    "Permission denied." The file permissions do not allow the attempted operation.


这通常意味着你的#create操作没有读取、写入或遍历你试图管理的文件路径的权限,所以你需要更改你的实现(你在原始文章中没有显示),以确保你的Ruby进程拥有执行所需的文件或文件系统权限。

另见

相关问题