2011-09-23 25 views
21

Ho appena distribuito un'applicazione Rails 3 con Ruby 1.9.2. Ho ricevuto diversi errori.Autorizzazione negata in tmp

  1. application.css non è stato compilato. quindi ho impostato la pre-compilazione in production.rb su false;
  2. Quindi ho ricevuto: cannot generate tempfile, così ho fatto rake tmp:clear;
  3. E ora ottengo ActionView::Template::Error (Permission denied - /srv/www/appname/tmp/cache/assets): e non sono stato in grado di risolvere questo.

Si prega di aiutare.

risposta

31

Se il user:group esegue il server Web è http:http e su cui sta girando * nix, fare questo:

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

Inoltre, domanda stupida, ma fa/tmp/cache/esistono beni?

E, in caso affermativo, come @leonel punti fuori, potrebbe anche essere necessario cambiare i permessi:

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

essere attenta impostazione 777 permessi su qualsiasi cosa. Fai questo solo per verificare un problema con le autorizzazioni, quindi ripristina le autorizzazioni minime necessarie.

+4

Quindi quel comando darebbe la proprietà a qualcuno? Ho dovuto cambiare i permessi della cache in drwxrwxrwx. – leonel

+1

@leonel ha dato la risposta giusta: 'chmod 777/srv/www/appname/tmp/cache' ha risolto il problema per me. – kgadek

+4

Prestare attenzione quando si assegnano autorizzazioni di directory 777: vedere [Risolvere i problemi che consigliano "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

2

Probabilmente non hai creato l'applicazione Rails con l'utente che sta eseguendo il server ora. Puoi incollare l'output di ls -alh /srv/www/appname/tmp/cache/assets e dirci all'utente che esegue il server web?

+0

No. Ho creato l'app nel mio computer di sviluppo e l'ho caricata sul sistema di produzione tramite FTP. Penso che l'utente che esegue il server sia root. L'ho fatto funzionare già, ma ho dovuto cambiare i permessi sulla cartella della cache in 'drwxrwxrwx'. Se c'è un modo migliore per favore fammi sapere. Questo è l'output del comando ls-alh: http://pastebin.com/v1sH5Qhb – leonel

+1

Gli utenti che non appartengono al gruppo nogroup non possono scrivere nella cartella. È necessario modificare il proprietario/gruppo della cartella tmp. –

0

ho incontrato questo errore di recente. Apache non è stato in grado di scrivere alla directory tmp

non può generare tempfile /tmp/RackRewindableInput2xxxxxxxxxxxxxxxxx' /app-lib/lib/ruby/1.8/tempfile.rb:52:in inizializzazione' app-dir/vendor/gemme/cremagliera-1.0.1/lib/cremagliera/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/gemme/cremagliera-1.0.1/lib/cremagliera/rewindable_input.rb: 26: in read' app-dir/vendor/gems/rack-1.0.1/lib/rack/request.rb:134:in POST'

ho controllato il permesso di directory tmp e aveva il permesso a tutti i gruppi di scrivici Ho cambiato il proprietario della directory tmp e non ha risolto l'errore.

Il colpevole era che la directory tmp era piena di troppi file di grandi dimensioni e sembra che in qualche modo l'apache non avesse spazio sufficiente per scrivere questo nuovo file. Cancellato tutti i file temporanei e precedenti. Ha risolto il problema.

3
  1. rendere la cartella tmp del vostro scrivibile progetto:

    chown -R group:user /path/to/rails/app/tmp 
    chmod -R 777 /path/to/rails/app/tmp 
    
  2. Nella console, eseguire rake tmp:cache:clear

  3. Riavviare l'applicazione.

+1

** STOP **. Non farlo! Questo è potenzialmente molto pericoloso. Si prega di consultare [Risolvere le risposte che consigliano "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

+1

rake tmp: cache: clear risolve il problema! solo questo!! Grazie – EderRoger

-2

Molto probabilmente ti ha dato il permesso di cartella principale lettura della tua app e modalità eseguire. Tuttavia, per generare nuovi file dall'app, è inoltre necessario fornire autorizzazione di scrittura per la cartella richiesta. Ad esempio: yUML utilizza la cartella tmp per generare file. Ho dato il permesso tmp cartella di scrittura:

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

risolto il mio problema.

+2

** STOP **. Non farlo! Questo è potenzialmente molto pericoloso. Si prega di consultare [Risolvere le risposte che consigliano "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

-2

Nel mio localhost ha dato questo errore, e il comando chmod 777 C:/Sites/project_name/tmp/cache/ ha risolto il mio problema.

1

Ora, per quelli di noi che utilizzano Windows - Se si è un amministratore e vedere questo errore

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

allora è permesso e proprietà problema impostazione su Windows. È possibile accedere alla cartella tmp dell'applicazione e autorizzare (Utente) a ** leggere, scrivere ed eseguire ** sulla cartella. Fare clic su [qui] [1] per visualizzare come fornire le autorizzazioni.

Correzione rapida. Apri il tuo terminale ed esegui il seguente comando come amministratore

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

Quindi riavviare il server.

0

Dobbiamo concedere le autorizzazioni per accedere alla directory richiesta per l'utente root del sistema

sudo chmod 777 -R your_project_directory_to_be_access 

Nel tuo caso è possibile utilizzare:

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

Per motivi di sicurezza, basta tenere a mente:

chmod 777 consente a tutti di leggere, scrivere ed eseguire diritti che per la maggior parte dei problemi è decisamente eccessivo.

Problemi correlati