【问题标题】:Rake tasks from cron - uninitialized constant YAML::ENGINE来自 cron 的 Rake 任务 - 未初始化的常量 YAML::ENGINE
【发布时间】:2011-08-12 19:08:47
【问题描述】:

自从我将服务器升级到 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

无济于事。

【问题讨论】:

    标签: ruby-on-rails-3 ruby-1.9.2


    【解决方案1】:

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

    更新

    如何从程序中判断程序正在使用哪个 Ruby 版本:

    puts `ruby -v`
    

    如何强制 cron 任务在特定 Ruby 版本下运行(如果服务器使用 RVM)的蹩脚方式:

    rvm use 1.8.7; ...
    

    【讨论】:

    • 我不知道它是直接从 cron 运行的,你知道如何强制 cron 作业进入 1.9.2 吗?
    • 我更新了答案,但我没有太多经验,所以建议的解决方案很蹩脚,必须有更好的方法。 cron 也很有可能在不同的帐户下运行,因此它不了解 RVM 并使用系统 ruby​​(/usr/bin/ruby 或其他东西) - 在这种情况下,请在您的服务器上重新安装 ruby​​。
    • 我正在尝试这个solution,这可能是前进的方向,非常感谢@LukasStejskal
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多