user117399
user117399

Reputation:

Log files not being written to (Passenger)

Locally, my app runs fine on and writes to its logs.

My production server is running CentOS with an Apache server running Passenger. When trying to debug, I noticed my log files were not being written to. First thing I did was chmod 0666 them, and when I found out that didn't work I looked at my apache log. I found this: Rails Error: Unable to access log file. Please ensure that /var/www/vhosts/mysite.com/rails/exp/releases/20091124020342/log/production.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.

(Note: I am deploying with capistrano)

Anyway, I Googled around and found people saying it's an SELinux issue, so I looked on passenger's docs and found this: http://www.modrails.com/documentation/Users%20guide.html#_my_rails_application_8217_s_log_file_is_not_being_written_to

which basically says do this: chcon -R -h -t httpd_sys_content_t /path/to/your/rails/app

However, when I fill in the proper path I get: Operation not supported.

Pretty stumped...any ideas?

Upvotes: 4

Views: 8534

Answers (2)

Shyam Habarakada
Shyam Habarakada

Reputation: 15785

I ran into the same issue with my ubuntu 10.x server. Here's what I learned while troubleshooting.

  • As mentioned previously and in the docs, Passenger runs the rails ruby processes as the owner of the config/environment.rb file. Unless you have done something special, this is typically the same as the owner of your entire rails application directory. In the case of a capistrano deployment, this is the capistrano user.
  • If environment.rb is owned by root (most likely because you are deploying as root) passenger runs the rails processes as 'nobody'

You can see which user the processes are run as via the top command (or any number of other techniques).

In either case -- mine happend to be the latter -- if the rails processes cannot write to the log files, nothing shows up in the logs (duh). Rails will ignore this permission denied error and try to process the requests as normally.

The solution is to ensure that the rails ruby processes are running as the same user that owns your rails deployment, config/environment.rb file and the logs directory and files.

This can be either deplyment configuration step to chown the files and directories in question or configuring apache and telling it to run the ruby process as a specific user (say, root instead of nobody). Running as root is obviously not recommended, but if you are doing that for whatever reasons, and need to see rails logs properly written to, you can do this by adding the following

# in /etc/apache2/apache2.conf
PassengerDefaultUser root 

If you are not deploying as root (which is the case on another server I have), the typical scenario should be that the rails app directory is owned by that non-root-user, and passenger should run the rails processes as that same user. And everything should just work.

[1] http://www.modrails.com/documentation/Users%20guide%20Apache.html#_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error

Upvotes: 3

coreypurcell
coreypurcell

Reputation: 573

What are the results of "ls -l" on your log file? On Ubuntu I have to make sure that the acl's are correct on the log files. I usually solve that by using

sudo chown -R deploy:deploy /path/to/app

Deploy is the user that passenger runs in.

Upvotes: 4

Related Questions