rails, rake and crontab

136 views
Skip to first unread message

med addame

unread,
Jul 13, 2010, 10:50:04 AM7/13/10
to rubyonra...@googlegroups.com
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
--
Posted via http://www.ruby-forum.com/.

Colin Law

unread,
Jul 13, 2010, 11:03:01 AM7/13/10
to rubyonra...@googlegroups.com
On 13 July 2010 15:50, med addame <li...@ruby-forum.com> 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

med addame

unread,
Jul 13, 2010, 11:12:08 AM7/13/10
to rubyonra...@googlegroups.com
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:
> On 13 July 2010 15:50, med addame <li...@ruby-forum.com> 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

--
Posted via http://www.ruby-forum.com/.

med addame

unread,
Jul 13, 2010, 11:29:51 AM7/13/10
to rubyonra...@googlegroups.com
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.

Reply all
Reply to author
Forward
0 new messages