2011-08-12 52 views
3

从cron运行rake任务时,我得到未初始化的常量YAML :: ENGINE,因为我已将服务器升级到ruby 1.9.2。我有与应用程序相同的错误,但把...来自cron的Rake任务 - 未初始化的常量YAML :: ENGINE

require 'yaml' 
YAML::ENGINE.yamler= 'syck' 

在boot.rb文件中修复它。如果我直接从我的Ubuntu服务器上的命令行运行任务,它可以正常工作,服务器使用RVM。

但是运行从cron任务似乎并不皮卡此修复程序,我已经尝试了这个...

task :twitter, :needs => :environment do 
    require 'yaml' 
    YAML::ENGINE.yamler= 'syck' 
    @tweets = Property.updatetwitter 
end 

无济于事。

回答

4

你确定你在Ruby 1.9.2下运行它吗?因为当YAML :: ENGINE存在于1.9.2中时,它不在1.8.7中。检查你的Ruby版本。

UPDATE

如何分辨它从程序中的Ruby版本的程序正在使用:

puts `ruby -v` 

拉梅方式如何执行的cron任务,在特定的Ruby版本上运行(如果服务器使用RVM ):

rvm use 1.8.7; ... 
+0

我不能说,因为它直接从cron运行,你知道我可以如何强制cron作业到1.9.2吗? – creativetechnologist

+0

我更新了答案,但我没有太多的经验,所以提出的解决方案是蹩脚的,这里有更好的方法。 cron也可能运行在不同的帐户下,所以它不知道RVM并使用系统ruby(/ usr/bin/ruby​​或其他) - 在这种情况下,请在您的服务器上重新安装ruby。 –

+0

我正在尝试这个[解决方案](http://stackoverflow.com/questions/2398722/script-executes-successfully-in-commandline-but-not-as-a-cronjob/2399118#2399118)这可能是向前,非常感谢@LukasStejskal – creativetechnologist

相关问题