2014-05-23 7 views
18

Ho usato Ruby on Rails sul server Red Hat. Quando si cerca di generare un file di controllo, ho ottenuto questo errore:Ruby on Rails: autorizzazione negata quando si utilizza "rails generate controller welcome"

[[email protected] testApp4]$ rails generate controller welcome 
/home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `initialize': Permission denied @ rb_sysopen - /tmp/spring/fea371aaf9d69cfa58bd12f69b3f1bf6.pid (Errno::EACCES) 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `open' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `open' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `initialize' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:14:in `new' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:14:in `boot' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:43:in `block in boot_server' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:41:in `fork' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:41:in `boot_server' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:24:in `call' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/rails.rb:23:in `call' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client.rb:26:in `run' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/bin/spring:48:in `<top (required)>' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load' 
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `<top (required)>' 
from /home/ec2-user/testApp4/bin/spring:16:in `require' 
from /home/ec2-user/testApp4/bin/spring:16:in `<top (required)>' 
from bin/rails:3:in `load' 
from bin/rails:3:in `<main>' 

risposta

33

ho risolto il problema eseguendo

sudo chmod -R 1777 /tmp 

Spero che questo aiuti altre persone come me che preferiscono non dover disattivare la gemma di primavera

+0

Se si è su un sistema condiviso, 777 darà a tutti gli altri utenti l'accesso in lettura e scrittura a quei file ... non una buona idea. – Blaskovicz

+1

Non è stato utile per m – ElliotM

3

Manca l'autorizzazione per la cartella tmp a scrivibile. Corro chmod 777 tmp/

+1

Ho eseguito chmod 777 tmp /, e il problema esiste ancora. – windrider297

+1

'(sudo) chmod 1777/tmp', non' 777', né 'tmp /'. – DMKE

+0

@DMKE Eseguo sudo chmod 1777/tmp. Ma il problema esiste ancora. Ho anche ricevuto lo stesso errore quando digito la console di rails – windrider297

5

Ha bisogno di proprietà di scrivere la ri-scrivere il pid per ogni avvio del server.

ho dovuto correre con il mio completo percorso locale & sudo

$ sudo chmod -R 777/Users/MyName/Desktop/progetti/my_project/tmp/

4

ho preso uno sguardo alla biblioteca quello sta provando a scrivere il file pid, .

La funzione in questione cerca di creare una directory temporanea nella stessa posizione ogni volta che a meno che il XDG_RUNTIME_DIR è impostato:

path = Pathname.new(File.join(ENV['XDG_RUNTIME_DIR'] || Dir.tmpdir, "spring"))

Impostazione detto variabile a una directory unica fa il trucco per me:

export XDG_RUNTIME_DIR=/tmp/`whoami` 
0

Oppure,

export XDG_RUNTIME_DIR=/run/user/${id -u} 

per modificare questa variabile di sistema. id -u restituisce il tuo UID (id utente), che è il nome della directory dove hai accesso per scrivere/leggere sotto /run/user/.