2014-05-23 10 views
18

Użyłem Ruby on Rails na serwerze Red Hat. Kiedy próbuje wygenerować plik sterownika, mam ten błąd:Ruby on Rails: odmowa zgody podczas używania "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>' 

Odpowiedz

33

I rozwiązać ten problem poprzez uruchomienie

sudo chmod -R 1777 /tmp 

nadzieję, że to pomoże innym ludziom jak ja, którzy woleliby nie trzeba wyłączać GEM wiosna

+0

Jeśli korzystasz z systemu współdzielonego, 777 da wszystkim innym użytkownikom prawo do odczytu i zapisu tych plików ... nie jest to dobre pomysł. – Blaskovicz

+1

Nie był pomocny dla m – ElliotM

3

Brak uprawnień do folderu tmp aby zapisywać. uruchomić chmod 777 tmp/

+1

Uruchomiłem chmod 777 tmp /, a problem nadal istnieje. – windrider297

+1

'(sudo) chmod 1777/tmp', nie' 777', ani 'tmp /'. – DMKE

+0

@DMKE Uruchamiam sudo chmod 1777/tmp. Ale problem nadal istnieje. Mam również ten sam błąd, gdy wpisuję konsolę szynową – windrider297

5

Trzeba własności napisać ponowne napisać pid dla każdego uruchomienia serwera.

musiałem uruchomić go z moją pełną ścieżkę lokalną & sudo

$ sudo chmod -R 777/Users/MyName/Pulpit/projekty/my_project/tmp/

4

Przyjrzałem w bibliotece to próbuje zapisać plik PID, lib/spring/env.rb.

Funkcja w pytaniu próbuje utworzyć katalog tymczasowy w tym samym miejscu za każdym razem, chyba że XDG_RUNTIME_DIR jest ustawiony:

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

Ustawienie tej zmiennej do unikalnego katalogu załatwia sprawę dla mnie:

export XDG_RUNTIME_DIR=/tmp/`whoami` 
0

Albo

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

, aby zmienić tę zmienną systemową. id -u zwraca twój UID (identyfikator użytkownika), który jest nazwą katalogu, gdzie masz dostęp do zapisu/odczytu pod numerem /run/user/.