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:ingem_version’
/var/www/html/metajorn/config/boot.rb:59:in load_rails_gem' /var/www/html/metajorn/config/boot.rb:54:inload_initializer’
/var/www/html/metajorn/config/boot.rb:38:in run' /var/www/html/metajorn/config/boot.rb:11:inboot!’
/var/www/html/metajorn/config/boot.rb:110:in <top (required)>' /var/www/html/metajorn/Rakefile:4:inrequire’
/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:inload’
/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:inblock 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:inload_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:instandard_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
It is noteworthy that the task is working fine if I run it manually.

Thanks,

M

On 13 July 2010 15:50, med addame [email protected] wrote:

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 L. wrote:

On 13 July 2010 15:50, med addame [email protected] wrote:

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

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:

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:ingem_version’
/var/www/html/metajorn/config/boot.rb:59:in load_rails_gem' /var/www/html/metajorn/config/boot.rb:54:inload_initializer’
/var/www/html/metajorn/config/boot.rb:38:in run' /var/www/html/metajorn/config/boot.rb:11:inboot!’
/var/www/html/metajorn/config/boot.rb:110:in <top (required)>' /var/www/html/metajorn/Rakefile:4:inrequire’
/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:inload’
/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:inblock 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:inload_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:instandard_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
It is noteworthy that the task is working fine if I run it manually.

Thanks,

M