I get the following error when restarting my rails app. I've had this problem before, on another server with another app, but can't remember what the problem was, or how I solved it.
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.
I'm deploying to a mongrel cluster with capistrano on Ubuntu.
When I do ls -l /apps/staging/releases/20090310162127/log/staging.log
the result is:
-rw-rw-rw- 1 me grp 51 Mar 10 16:07 /apps/staging/releases/20090310162127/log/staging.log
The log dir is a link
to /apps/staging/shared/log.
What's going on?
It turned out to be a subtle rails bug:
When an exception is raised in these two lines
logger = ActiveSupport::BufferedLogger.new(configuration.log_path)
logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
rails assumes it can't find the log file. However, the actual error occurred in the second line: a NameError because the constant is incorrect. The reason is that there was a legacy log level in my configuration file:
config.log_level = Logger::INFO
Rails 2.2 uses its own logger, and doesn't understand the above line.
Solution: remove line, or use:
config.log_level = :info