在由linux运行并由chef提供的vm框上执行/读取问题

时间:2014-12-08 11:56:40

标签: ruby linux chef

对不好的标题表示抱歉,但我无法想出该怎么称呼问题。

是的,所以我决定从Windows转到linux来解决问题,但现在我遇到了其他问题。 当我使用vagrant进行配置并尝试启动我的应用程序时,它会显示require': cannot load such file - /usr/ local/lib/ruby/gems/2.1.0/gems/gem_name-version/lib/gem_name/info所以我ssh'进入框中并且很好地进入文件夹,我很奇怪。我做ls -l我得到一份文件清单,其中包括一个据称无法找到我预期的文件(lib/gem_name/info),但这里是我实际上无法将CD刻录到目录/lib/gem_name中但是如果可以cat lib\\gem_name\\info.rb并且显示文件内容。

所有文件的权限是: -rw-r--r-- 1 root root

,可执行文件是: drwxr-xr-x 2 root root

我不知道如何解决此问题,为什么无法找到或使用这些文件?

编辑:我已将执行资源更改为user "root",但它仍然无法找到文件夹

我还想提及虽然lib\boot.rb存在lib,但文件夹根据ls -l并不是sudo ls -l,即使我lib它仍然存在lib不显示bin文件夹,仅显示{{1}}的内容。

编辑: 我还要提到{{1}}文件夹存在并按预期显示。

3 个答案:

答案 0 :(得分:0)

这是您问题的根本原因。 Root是超级用户,如果root拥有文件但未授予对其他用户的访问权限,则他们可以读取但不执行它。如果您希望将目录插入目录,则目录需要执行权限。

  

-rw-r - r-- 1 root root

Vagrant不以root身份运行。你需要让vagrant用户访问/ usr / local / lib / ruby​​,最简单的方法是:

  1. 以root身份ssh进入系统
  2. 发出命令chown -R vagrant:vagrant /usr/local/lib/ruby
  3. 这会将/ usr / local / lib / ruby​​的所有者更改为vagrant,所以一般情况下你不会在普通服务器上执行此操作,但鉴于这是一个虚拟框并且你正在使用vagrant在这里可以做到这一点。

答案 1 :(得分:0)

您似乎在/usr/local/lib/ruby/gems/2.1.0/gems/gem_name-version/lib/gem_name/info上获得了一些非常奇怪的权限,特别是如果root甚至无法看到它。您可以通过在父目录上执行ls -al来确认。您可以使用具有适当权限的directory主厨资源来修复它,但是您真的应该追究权限的根本原因。

答案 2 :(得分:0)

对于那些回答谢谢但我已经解决的人,在迁移到linux时我忘记删除一些代码,将所有/更改为\\,这意味着在linux中它创建了一个名为文件夹lib\app_name\info.rb内的info.rb代替lib/app_name。因此,在未来的孩子中,请记住确保您的路径正确。