Rails: impossible d'accéder au fichier journal
-
08-07-2019 - |
Question
Je reçois le message d'erreur suivant lors du redémarrage de mon application rails. J'ai déjà eu ce problème auparavant, sur un autre serveur avec une autre application, mais je ne me souviens pas de son problème ni de la façon dont je l'ai résolu.
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.
Je déploie sur un cluster métis avec capistrano sur Ubuntu.
Quand je fais ls -l /apps/staging/releases/20090310162127/log/staging.log
le résultat est:
-rw-rw-rw- 1 me grp 51 Mar 10 16:07 /apps/staging/releases/20090310162127/log/staging.log
Le répertoire de journalisation est un lien
vers / apps / staging / shared / log.
Qu'est-ce qui se passe?
La solution
Il s’est avéré qu’il s’agissait d’un bogue de rails subtil:
Quand une exception est levée dans ces deux lignes
logger = ActiveSupport::BufferedLogger.new(configuration.log_path)
logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
rails suppose qu'il ne peut pas trouver le fichier journal. Cependant, l'erreur réelle s'est produite dans la deuxième ligne: une erreur NameError car la constante est incorrecte. La raison en est qu'il y avait un niveau de journal hérité dans mon fichier de configuration:
config.log_level = Logger::INFO
Rails 2.2 utilise son propre enregistreur et ne comprend pas la ligne ci-dessus.
Solution: supprimez la ligne ou utilisez:
config.log_level = :info
Autres conseils
Rails est-il exécuté en tant que moi
? Si non, quel utilisateur est-il exécuté? Cet utilisateur jail
est-il édité? L'utilisateur dispose-t-il d'autorisations transversales pour tous les composants de / apps / staging / shared / log
ainsi que pour tous les composants de / apps / staging / releases / 20090310162127 / log
?