2011-09-23 40 views
21

我剛剛部署了Ruby 1.9.2的Rails 3應用程序。我一直在收到幾個錯誤。tmp中的權限被拒絕

  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):,我一直無法解決這個問題。

請幫忙。

回答

31

如果運行Web服務器的user:grouphttp:http和它在* nix上運行,這樣做:

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

此外,愚蠢的問題,但它的/ tmp /緩存/資產存在嗎?

而且,如果是這樣,作爲@leonel指出,可能還需要更改權限:

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

小心上的任何設置777權限。只有這樣做才能驗證權限問題,然後重置爲必需的最小權限。

+4

那麼這個命令會給任何人以所有權?我必須將緩存的權限更改爲drwxrwxrwx。 – leonel

+1

@leonel給出了正確的答案:'chmod 777/srv/www/appname/tmp/cache'解決了我的問題。 – kgadek

+4

給予任何目錄777權限時請小心:請參閱[修復建議「chmod 777」](http://meta.stackoverflow.com/q/318885/4174897)的答案。 – JAL

2

您現在可能沒有在用戶運行服務器的情況下創建Rails應用程序。你能粘貼ls -alh /srv/www/appname/tmp/cache/assets的輸出並告訴我們用戶運行網絡服務器嗎?

+0

號我創建的應用程序在我的機器,然後用FTP上傳到生產機器。我認爲運行服務器的用戶是root用戶。我已經開始工作了,但我必須將緩存文件夾的權限更改爲'drwxrwxrwx'。如果有更好的方法,請讓我知道。這是LS-ALH命令的輸出:http://pastebin.com/v1sH5Qhb – leonel

+1

用戶不是nogroup組中不能寫入文件夾。您需要更改tmp文件夾的所有者/組。 –

0

我最近遇到了這個錯誤。阿帕奇無法寫入tmp目錄

不能生成臨時文件/tmp/RackRewindableInput2xxxxxxxxxxxxxxxxx' /app-lib/lib/ruby/1.8/tempfile.rb:52:in初始化」 APP-DIR /供應商/寶石/機架1.0.1/lib中/架/ rewindable_input.rb :73:在new' app-dir/vendor/gems/rack-1.0.1/lib/rack/rewindable_input.rb:73:in make_rewindable ' APP-DIR /供應商/寶石/機架1.0.1/lib中/架/ rewindable_input.rb:26:在read' app-dir/vendor/gems/rack-1.0.1/lib/rack/request.rb:134:in POST'

我檢查tmp目錄的權限,它有權限的所有組寫信給它。 我更改了tmp目錄的所有者,但它也沒有解決錯誤。

罪魁禍首是tmp目錄中充滿了太多的大文件,看起來像apache沒有足夠的空間來寫這個新文件。 清除所有臨時和舊文件。它整理了這個問題。

3
  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. 重新啓動應用程序。

+1

**停止**。不要這樣做!這可能是非常危險的。請參閱[修復建議「chmod 777」](http://meta.stackoverflow.com/q/318885/4174897)的答案。 – JAL

+1

rake tmp:cache:clear解決問題!只有這個!!謝謝 – EderRoger

-2

則很可能給了允許你的應用程序的主文件夾讀取和執行模式。然而,爲了從應用中生成新文件,你還需要將寫權限所需的文件夾。例如:yUML使用tmp文件夾來生成文件。我給了TMP文件夾的寫權限:

搭配chmod -R 777在/ usr /共享/ nginx的/ HTML/yuml_product/tmp目錄

解決我的問題。

+2

**停止**。不要這樣做!這可能是非常危險的。請參閱[修復建議「chmod 777」](http://meta.stackoverflow.com/q/318885/4174897)的答案。 – JAL

-2

在我的本地主機它給了這個錯誤,並且命令chmod 777 C:/Sites/project_name/tmp/cache/解決我的問題。

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 

然後重新啓動服務器。

0

我們需要授予的權限來訪問所需的目錄系統的root用戶

sudo chmod 777 -R your_project_directory_to_be_access 

你的情況,你可以使用:

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

出於安全原因,只是不停地在你的心中:

chmod 777給大家讀,寫和執行權限對於大多數問題是明確太多。