2011-09-23 17 views
21

Właśnie wdrożyłem aplikację Rails 3 z Ruby 1.9.2. Otrzymuję kilka błędów.Odmowa uprawnień w tmp

  1. application.css nie został skompilowany. więc ustawiłem wstępną kompilację w production.rb na false;
  2. Potem dostałem: cannot generate tempfile, więc zrobiłem rake tmp:clear;
  3. A teraz dostaję ActionView::Template::Error (Permission denied - /srv/www/appname/tmp/cache/assets): i nie jestem w stanie naprawić tego.

Proszę o pomoc.

Odpowiedz

31

Jeśli user:group uruchomiony serwer WWW jest http:http i to działa na * nix, to zrobić:

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

również głupie pytanie, ale czy/tmp/cache/istnieć trwałe?

A jeśli tak, to jak @leonel Zwraca uwagę, można również trzeba zmienić uprawnienia:

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

Uważać ustawienie 777 uprawnienia na niczym. Rób to tylko po to, aby zweryfikować problem z uprawnieniami, a następnie zresetuj je do minimalnych wymaganych uprawnień.

+4

Więc to polecenie dałoby każdemu prawo własności? Musiałem zmienić uprawnienia pamięci podręcznej na drwxrwxrwx. – leonel

+1

@leonel podał właściwą odpowiedź: 'chmod 777/srv/www/appname/tmp/cache' naprawił problem dla mnie. – kgadek

+4

Należy zachować ostrożność przy nadawaniu uprawnień do katalogów 777: Patrz [Naprawianie odpowiedzi zalecających "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

2

Prawdopodobnie nie utworzyłeś swojej aplikacji Railsowej z użytkownikiem, na którym działa teraz serwer. Czy możesz wkleić dane wyjściowe z ls -alh /srv/www/appname/tmp/cache/assets i poinformować nas o uruchomieniu serwera WWW?

+0

Nie. Stworzyłem aplikację na moim komputerze programistycznym, a następnie przesłałem ją na maszynę produkcyjną za pomocą FTP. Myślę, że użytkownik uruchamiający serwer jest rootem. Zrobiłem to już działa, ale musiałem zmienić uprawnienia w folderze pamięci podręcznej na 'drwxrwxrwx'. Jeśli jest lepszy sposób, proszę daj mi znać. Jest to wynik komendy lsahhh: http://pastebin.com/v1sH5Qhb – leonel

+1

Użytkownicy spoza grupy nogroup nie mogą pisać do twojego folderu. Musisz zmienić właściciela/grupę folderu tmp. –

0

I napotkał ten błąd niedawno. Apache nie był w stanie napisać do katalogu tmp

nie może generować tempfile /tmp/RackRewindableInput2xxxxxxxxxxxxxxxxx' /app-lib/lib/ruby/1.8/tempfile.rb:52:in initialize” app-dir/sprzedawca/kamienie/rack-1.0.1/lib/stojak/rewindable_input.rb: 73: w new' app-dir/vendor/gems/rack-1.0.1/lib/rack/rewindable_input.rb:73:in make_rewindable " app-dir/sprzedawca/kamienie/rack-1.0.1/lib/stojak/rewindable_input.rb: 26: w read' app-dir/vendor/gems/rack-1.0.1/lib/rack/request.rb:134:in Poczty

Sprawdziłem zgody katalogu tmp i miał uprawnienia do wszystkich grup do napisz do niego. Zmieniłem właściciela katalogu tmp i nie rozwiąże to problemu.

Sprawcą był katalog tmp wypełniony zbyt dużą liczbą dużych plików i wygląda na to, że Apache nie miał dość miejsca na zapisanie tego nowego pliku. Usunięto wszystkie tymczasowe i stare pliki. To rozwiązało problem.

3
  1. Dodać folder TMP Zapisywalny projektu:

    chown -R group:user /path/to/rails/app/tmp 
    chmod -R 777 /path/to/rails/app/tmp 
    
  2. w konsoli, uruchom rake tmp:cache:clear

  3. Ponownie uruchom aplikację.

+1

** STOP **. Nie rób tego! Jest to potencjalnie bardzo niebezpieczne. Zobacz [Naprawiono odpowiedzi, które zalecają "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

+1

rake tmp: cache: clear rozwiązuje problem! tylko to!! Dzięki – EderRoger

-2

Najprawdopodobniej dał pozwolenie na głównego folderu przeczytane Twojej aplikacji i tryb wykonać. Jednak aby wygenerować nowe pliki z aplikacji, musisz również podać zezwolić na pisanie dla wymaganego folderu. Na przykład: yUML używa folderu tmp do generowania plików. Dałem tmp pozwolenia folderu napisać:

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

rozwiązać mój problem.

+2

** STOP **. Nie rób tego! Jest to potencjalnie bardzo niebezpieczne. Zobacz [Naprawiono odpowiedzi, które zalecają "chmod 777"] (http://meta.stackoverflow.com/q/318885/4174897). – JAL

-2

W moim localhost podał ten błąd, a polecenie chmod 777 C:/Sites/project_name/tmp/cache/ rozwiązało mój problem.

1

Teraz dla tych z nas, które są przy użyciu okna - Jeśli jesteś administratorem i zobaczyć ten błąd

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

Potem jest kwestia zgody i Własność ustawienie w systemie Windows. Możesz przejść do folderu tmp w swojej aplikacji i dać sobie (Użytkownikowi) uprawnienie do ** Odczyt, Zapis i Wykonanie ** w folderze. Kliknij [tutaj] [1], aby wyświetlić sposób udzielania uprawnień.

Szybka korekta. Otwórz terminal i uruchom następujące polecenie administratora

Następnie Uruchom ponownie serwer.

0

Musimy przyznać uprawnienia do dostępu wymagany katalog dla użytkownika root systemu

sudo chmod 777 -R your_project_directory_to_be_access 

w twoim przypadku można użyć:

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

Ze względów bezpieczeństwa, po prostu zachować w swoim umyśle:

chmod 777 daje wszystkim prawo do czytania, pisania i wykonywania, co dla większości problemów jest zdecydowanie zbyt duże.

Powiązane problemy