Rails 3.1 Errno :: EACCES权限被拒绝

时间:2011-11-14 20:43:46

标签: ruby-on-rails-3.1

Rails 3.1 Passenger on Apache Development环境 当我去获取路线的索引(即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)拥有资产目录...不确定是什么我在这里做错了......或者我还能展示什么来帮助。

10 个答案:

答案 0 :(得分:17)

更新:是的,这个答案来自无知,然后似乎获得了牵引力。无论如何,真正的答案可以在Austen Tomek's answer

中找到

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

答案 1 :(得分:15)

我在遇到此错误时找到此帖子,并且此处运行chmod 777

您需要对如何启用组权限和适当配置apach设置进行一些研究。这是一个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

答案 2 :(得分:12)

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

答案 3 :(得分:5)

对我来说这很有用:

sudo chown -R username app_path

答案 4 :(得分:4)

只需在项目文件夹

上运行chown
chown -R www-data /var/www/

答案 5 :(得分:1)

我使用windows vs code和ubuntu子系统作为终端。

我不得不将我的项目文件夹从ubuntu子系统区域移动到windows区域。 所以每次我用ubuntu运行东西我都要打字 cd /mnt/c/projects/my_app

它似乎允许应用程序运行,并且db / server的内容可以正常运行..

里斯

答案 6 :(得分:0)

感谢上面的帖子,我也解决了自己的问题。就个人而言,一个重要的文件夹被标记为&#34; Hidden&#34; (按照ERROR路径错误:权限被拒绝 - ... / _ netrc(Errno :: EACCES)一旦我右键单击并将其文件夹选项设置为NOT HIDDEN,那么一切正常!

答案 7 :(得分:0)

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

答案 8 :(得分:0)

在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中的旧资产时,它工作正常。

仅此而已。

我希望这会有所帮助

答案 9 :(得分:-1)

在我的情况下,更改权利或目录的所有权并没有帮助( 必要)。原来是Selinux踢了(默认情况下在Fedora中启用)并且禁用是治愈:

$ sudo setenforce 0

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

SELINUX=disabled