【问题标题】:Rails Errno::EACCES Permission DeniedRails Errno::EACCES 权限被拒绝
【发布时间】:2011-12-28 23:53:58
【问题描述】:

Apache 开发环境中的 Rails 3.1 乘客 当我去访问索引(即 GET)的路线时,我得到:

Errno::EACCES in Crb_agendas#index

Showing /var/www/crbagenda/app/views/layouts/application.html.erb where line #5 raised:

Permission denied - /var/www/crbagenda/tmp/cache/assets/E2C

Extracted source (around line #5):

2: <html>
3: <head>
4:   <title>CrbAgendas</title>
5:   <%= stylesheet_link_tag "application" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>

Rails.root: /var/www/crbagenda

当我转到提到的路径 (/var/www/crbagenda/tmp/cache/assets/E2C) 时,没有 E2C 文件夹,并且 root (运行 apache 的)拥有资产目录...不确定是什么我在这里做错了......或者我还能提供什么帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1


    【解决方案1】:

    更新:是的,这个答案来自无知,然后似乎获得了牵引力。不管怎样,真正的答案在Austen Tomek's answer

    通过在 tmp 目录上执行 chmod 777 解决了这个问题,所以我猜这是我对用户/权限设置的无知。

    【讨论】:

    • 这也解决了我的问题。谢谢。
    • 这真的不是解决这个问题的方法。这就像说您的钥匙无法打开您的前门,所以您只需卸下锁并收工。请参阅奥斯汀的答案以获得更好的方法。
    • @JoshPinter 我的回答受到了多大的关注,真是令人尴尬。我更新了我的添加指向奥斯汀答案的链接。
    • @ScottJShea 不错。公平地说,我将其作为生产中的临时修复,只是为了保持应用程序正常运行,但随后在维护期间更正了权限。感谢您更新您的答案。
    • 如果您甚至在更新答案中说另一个更正确,那么您实际上会选择另一个问题作为接受的答案,这将是一件好事。这可能有助于防止人们在不理解的情况下移除锁......
    【解决方案2】:

    我完全删除了 tmp 文件夹,这对我有用。它只是由网络服务器重新生成。

    【讨论】:

      【解决方案3】:

      我在遇到此错误并运行chmod 777 时发现此帖子不是这里的解决方案。

      您需要对如何启用组权限和适当地配置 apaches 设置进行一些研究。这是一个 Stack Exchange 线程,详细说明了这一点并包含有用的链接。确保 apache 具有对相应目录的读、写和执行权限,但不要简单地让任何人修改该目录。找到您的系统 apache 组并运行 chownchmod -g+[What permissions apache needs goes here] 我建议不要使用 -R 选项运行它,并积极查看 apache 对特定目录需要哪些权限。 Link to Stack Exchange thread regarding apache permissions and permissions in general

      【讨论】:

      • 这似乎没有充分回答这个问题。也可能是权限希望与 find 一起应用的情况,例如find . -type f -not -user $USER -exec chown $UID:$GID {} \;
      【解决方案4】:

      只需在项目文件夹上运行 chown

      chown -R www-data /var/www/
      

      【讨论】:

        【解决方案5】:

        感谢上面的帖子,我也解决了自己的问题。就个人而言,一个重要的文件夹被标记为“隐藏”(按照错误路径错误:权限被拒绝 - .../_netrc (Errno::EACCES) 我右键单击并将其文件夹选项设置为不隐藏,然后一切正常很好!

        【讨论】:

          【解决方案6】:

          在我的情况下,更改目录的权利或所有权并没有帮助(嗯,它必要的)。原来Selinux 启动了(在 Fedora 中默认启用)并且禁用是解决方法:

          $ sudo setenforce 0
          

          要使更改永久生效,必须更改/etc/selinux/config 文件中的设置:

          SELINUX=disabled
          

          【讨论】:

            【解决方案7】:

            对我来说很有用:

            sudo chown -R username app_path
            

            【讨论】:

              【解决方案8】:

              我正在使用带有 ubuntu 子系统的 windows vs code 作为终端。

              我不得不将我的项目文件夹从 ubuntu 子系统区域移动到 windows 区域.. 所以每次我用 ubuntu 运行东西时,我都必须输入 cd /mnt/c/projects/my_app

              它似乎允许应用程序运行并且数据库/服务器的东西可以正常运行..

              里斯

              【讨论】:

              • 请查看其他提供的答案。
              【解决方案9】:

              在 Windows 上,只需以管理员身份打开 cmd 并执行 gem install "lib" 命令

              【讨论】:

                【解决方案10】:

                我在 Ubuntu 20.04 中处理 Rails 6 应用程序时遇到了同样的问题。

                每次我运行命令 rails assets:clobber 以完全删除 public/assets 中的旧资产时,我都会收到错误消息:

                errno::enotempty: 目录不为空@dir_s_rmdir

                errno::eacces: 权限被拒绝@apply2files

                日志指向导致它的文件的路径,在我的例子中是public/packs/manifest.json 文件。

                我尝试删除它或更改权限,但没有任何效果。我也试过删除项目中的tmp目录,但是没用。

                这是我修复它的方法

                我使用ls -lh 命令列出了该目录中的所有文件和目录,这给了我这样的输出:

                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct  6 20:29 404.html
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct  6 20:29 422.html
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.6K Oct  6 20:29 500.html
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 apple-touch-icon.png
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 apple-touch-icon-precomposed.png
                drwxr-xr-x 3 promisechukwuenyem promisechukwuenyem 4.0K Oct 13 09:20 armstrong_tools
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 favicon.ico
                drwxr-xr-x 3 root               root               4.0K Oct  8 13:06 packs
                -rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem   99 Oct  6 20:29 robots.txt
                

                我意识到packs 目录拥有root 所有权,这与其他文件和目录的权限是分开的:

                drwxr-xr-x 3 root               root               4.0K Oct  8 13:06 packs
                

                我只是运行下面的命令将所有权从 root 更改为 promisechukwuenyem:

                sudo chown -R promisechukwuenyem:promisechukwuenyem packs/
                

                现在,当我运行命令 rails assets:clobber 以完全删除 public/assets 中的旧资产时,它工作得很好。

                就是这样。

                我希望这会有所帮助

                【讨论】:

                  猜你喜欢
                  • 2011-08-30
                  • 2016-01-19
                  • 2015-12-06
                  • 1970-01-01
                  • 2015-07-20
                  • 2016-03-14
                  • 2014-01-24
                  • 2019-02-13
                  • 1970-01-01
                  相关资源
                  最近更新 更多