rails, rake and crontab

I have a rails rake task which runs just fine. I want this task to be run periodically by crontab so I added it to crontab as follows : 0,30,0 * * * * cd /var/www/html/myapp && RAILS_ENV=production /usr/local/bin/rake myraketask --trace >> /var/www/html/myapp/log/cron_log.log 2>&1

In cron_log.log I'm seeing the following error:

rake aborted! invalid byte sequence in US-ASCII /var/www/html/metajorn/config/boot.rb:98:in `parse_gem_version' /var/www/html/metajorn/config/boot.rb:80:in `gem_version' /var/www/html/metajorn/config/boot.rb:59:in `load_rails_gem' /var/www/html/metajorn/config/boot.rb:54:in `load_initializer' /var/www/html/metajorn/config/boot.rb:38:in `run' /var/www/html/metajorn/config/boot.rb:11:in `boot!' /var/www/html/metajorn/config/boot.rb:110:in `<top (required)>' /var/www/html/metajorn/Rakefile:4:in `require' /var/www/html/metajorn/Rakefile:4:in `<top (required)>' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2383:in `load' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2383:in `raw_load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2017:in `block in load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2016:in `load_rakefile' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2000:in `block in run' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:1998:in `run' /usr/local/bin/rake:31:in `<main>' It is noteworthy that the task is working fine if I run it manually.

Thanks,

M

I have a rails rake task which runs just fine. I want this task to be run periodically by crontab so I added it to crontab as follows : 0,30,0 * * * * cd /var/www/html/myapp && RAILS_ENV=production /usr/local/bin/rake myraketask --trace >> /var/www/html/myapp/log/cron_log.log 2>&1

If you type exactly that command (from the cd obviously) into a terminal, does it work? Do you have permission to write into the log directory? Though can't see why that would give that error.

In cron_log.log I'm seeing the following error:

rake aborted! invalid byte sequence in US-ASCII /var/www/html/metajorn/config/boot.rb:98:in `parse_gem_version'

Are you sure this is as a result of the command above? It seems to be in the wrong directory.

What is in line 98 of boot.rb?

Colin

the crontab entry was : * * * * cd /var/www/html/metajorn && RAILS_ENV=production /usr/local/bin/rake myraketask --trace >> /var/www/html/metajorn/log/cron_log.log 2>&1

I changed the name to myapp just in the post ... but omitted to change it in the error trace.

So, yes when run manually it works just fine and file permissions are set to 777. I think it is related to some environment information that are not loaded by cron ... but I haven't find yet what is exactly missing.

Colin Law wrote:

I finally solved the problem: cron uses environment variables that may be different from the user environment variables... it was the case for me. my crond service uses us-ascii encoding while my rake task uses utf-8.

To fix the issue, I just had to change the encoding of crond by adding the following lines to my crond file (in my centos5 it is locaed in: /var/spool/cron/root )

SHELL=/bin/bash LANG=en_US.UTF-8 LANGUAGE=en LC_CTYPE=en_US.UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8"

Than, restarted crond : service crond restart M.

med addame wrote: