rails, rake and crontab

瀏覽次數:136 次
跳到第一則未讀訊息

med addame

未讀,
2010年7月13日 上午10:50:042010/7/13
收件者: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

未讀,
2010年7月13日 上午11:03:012010/7/13
收件者: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

未讀,
2010年7月13日 上午11:12:082010/7/13
收件者: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

未讀,
2010年7月13日 上午11:29:512010/7/13
收件者: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.

回覆所有人
回覆作者
轉寄
0 則新訊息