tmp中的权限被拒绝

时间:2011-09-23 04:33:14

标签: ruby-on-rails ruby

我刚刚使用Ruby 1.9.2部署了一个Rails 3应用程序。我遇到了一些错误。

  1. application.css未编译。所以我将production.rb中的预编译设置为false;
  2. 然后我得到了cannot generate tempfile,所以我做了rake tmp:clear;
  3. 现在我得到了ActionView::Template::Error (Permission denied - /srv/www/appname/tmp/cache/assets):而我无法解决这个问题。
  4. 请帮忙。

10 个答案:

答案 0 :(得分:37)

如果运行您的网络服务器的user:grouphttp:http并且它正在* nix上运行,请执行以下操作:

sudo chown -R http:http /srv/www/appname/

另外,愚蠢的问题,但/ tmp / cache / assets是否存在?

如果是这样,正如@leonel指出的那样,您可能还需要更改权限:

chmod 777 /srv/www/appname/tmp/cache

小心设置777权限。只有这样做才能验证权限问题,然后重置为必要的最小权限。

答案 1 :(得分:6)

很可能你是在apache乘客下运行你的应用程序。

您必须将config / environment.rb的所有者更改为对您的应用文件夹具有权限的人。

chown -R www-data:www-data /path/to/app

答案 2 :(得分:4)

  1. 使项目的tmp文件夹可写:

    chown -R group:user /path/to/rails/app/tmp
    chmod -R 777 /path/to/rails/app/tmp
    
  2. 在您的控制台中,运行rake tmp:cache:clear

  3. 重新启动您的应用程序。

答案 3 :(得分:2)

您现在可能没有使用运行服务器的用户创建Rails应用程序。您可以粘贴ls -alh /srv/www/appname/tmp/cache/assets的输出并告诉我们运行网络服务器的用户吗?

答案 4 :(得分:1)

我最近遇到了这个错误。 Apache无法写入tmp目录

  

无法生成tempfile   /tmp/RackRewindableInput2xxxxxxxxxxxxxxxxx' /app-lib/lib/ruby/1.8/tempfile.rb:52:in初始化”       app-dir / vendor / gems / rack-1.0.1 / lib / rack / rewindable_input.rb:73:in new' app-dir/vendor/gems/rack-1.0.1/lib/rack/rewindable_input.rb:73:in make_rewindable'       app-dir / vendor / gems / rack-1.0.1 / lib / rack / rewindable_input.rb:26:in read' app-dir/vendor/gems/rack-1.0.1/lib/rack/request.rb:134:in POST'

我检查了tmp目录的权限,并且它有权向所有组写入它。 我更改了tmp目录的所有者,但它也没有解决错误。

罪魁祸首是tmp目录中填充了太多的大文件,看起来像某种程度上apache没有足够的空间来编写这个新文件。 清除所有临时文件和旧文件。它解决了这个问题。

答案 5 :(得分:1)

现在我们这些正在使用Windows的人 - 如果您是管理员并且看到此错误

ActionView::Template::Error (Permission denied @ utime_failed) C:/User/..../tmp/cache/assets/sprochets/v3.0/E5/E5PZx-mq8.cache

然后是Windows上的“权限和所有权”设置问题。 您可以转到应用程序上的tmp文件夹,并授予自己(用户)对文件夹上的**读取,写入和执行**的权限。 单击[此处] [1]以查看如何授予权限。

快速修复。打开终端并以管理员身份运行以下命令

    takeown /f <location of your app tmp folder> /r /d y

然后重新启动服务器。

答案 6 :(得分:1)

我们需要授予访问系统root用户所需目录的权限

sudo chmod 777 -R your_project_directory_to_be_access

在您的情况下,您可以使用:

sudo chmod 777 -R /srv/www/appname/tmp/

出于安全考虑,请记住:

chmod 777赋予每个人阅读,写作和执行权利,这对于大多数问题来说确实太过分了。

答案 7 :(得分:0)

我认为一个更好的解决方案是不授予所有人对tmp文件夹的管理权限,就像这样:

 sudo rake tmp:cache:clear

这将清除temp文件夹,并且当您再次运行rails server时不会出错。

答案 8 :(得分:-1)

在我的localhost中它给出了这个错误,命令chmod 777 C:/Sites/project_name/tmp/cache/解决了我的问题。

答案 9 :(得分:-2)

很可能您已授予应用程序的主文件夹读取和执行模式的权限。但是,为了从您的应用生成新文件,您还需要授予所需文件夹的写入权限。例如:yUML使用tmp文件夹生成文件。我给了tmp文件夹写权限:

chmod -R 777 / usr / share / nginx / html / yuml_product / tmp

解决了我的问题。