2009-03-10 11 views
13

Wystąpił następujący błąd podczas ponownego uruchamiania aplikacji szyny. Miałem ten problem wcześniej, na innym serwerze z inną aplikacją, ale nie pamiętam, jaki był problem ani jak go rozwiązałem.Szyny: Nie można uzyskać dostępu do pliku dziennika

Rails Error: Unable to access log file. Please ensure that /apps/staging/releases/20090310162127/log/staging.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed. 

Wdrażam klastra kundla z capistrano na Ubuntu.

Kiedy zrobić ls -l /apps/staging/releases/20090310162127/log/staging.log

wynik jest:

-rw-rw-rw- 1 me grp 51 Mar 10 16:07 /apps/staging/releases/20090310162127/log/staging.log 

Dziennik reż to link do/apps/oczekiwania/shared/log.

Co się dzieje?

Odpowiedz

26

Okazało się być subtelny szyny bug:

Kiedy wyjątek jest podniesione w tych dwóch liniach

logger = ActiveSupport::BufferedLogger.new(configuration.log_path) 
logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase) 

szyny zakłada, że ​​nie może znaleźć pliku dziennika. Jednak faktyczny błąd wystąpił w drugim wierszu: a NameError, ponieważ stała jest niepoprawna. Powodem jest to, że nie było dziedzictwo poziom dziennika w moim pliku konfiguracyjnego:

config.log_level = Logger::INFO 

Rails 2.2 wykorzystuje własny rejestrator, i nie rozumie powyższą linię.

Rozwiązanie: usunąć wiersz lub użyj:

config.log_level = :info 
+0

Dobrze wiedzieć. Myślę, że kilka razy spotkałem się z tym problemem. –

+0

Wpadłem na to, gdy przełączałem komendy mailer i logger: config.log_level =: sendmail D'oh! – wesgarrison

+0

Dzięki za to, ciągle myślę, że to błąd VirtualBox. –

0

Czy Railsy działają jako me? Jeśli nie, jaki użytkownik uruchamia się jako? Czy to użytkownik jail "ed? Czy użytkownik ma uprawnienia do przechodzenia dla wszystkich składników /apps/staging/shared/log, a także wszystkich składników z /apps/staging/releases/20090310162127/log?

+0

Tak, to działa jak "ja", nie wiem co jail'ed oznacza jednak. Tak, wszystkie komponenty dir są przejezdne. wersje/20090310162127 są prawdopodobnie dostępne przez łącze (zwane bieżącym). –

+2

@Michiel, uwięziony oznacza, że ​​/ jest remapowany do specjalnego katalogu ze względów bezpieczeństwa. Czy możesz potwierdzić, że jeśli "su - me" i "touch /apps/staging/releases/20090310162127/log/staging.log" nie dostaniesz błędu, poprawne? – vladr

+0

Interesujące - powinienem się nad tym zastanowić. Komunikat o błędzie był jednak całkowicie mylący - nie ma nic wspólnego z plikiem dziennika. –

Powiązane problemy