【问题标题】:Gem not found in Ruby cron job in RVM env在 RVM env 的 Ruby cron 作业中找不到 Gem
【发布时间】:2014-01-24 02:42:08
【问题描述】:

我正在尝试在 RVM 环境中运行 10.5 的旧 PPC 机器上运行一个简单的 ruby​​ 脚本。

在 SO 上进行搜索,我已按照 post 中选择的答案进行操作。

这是 cron 中的结果:

SHELL=/bin/bash
00 * * * * BASH_ENV=~/.bash_profile && /bin/bash -c '~/deggy/onlineGW.rb'

此命令在用户 sam 的根目录下的 Bash 中运行良好。

这是我脚本的重点:

 #!/usr/bin/env ruby
 require 'open-uri'
 require 'nokogiri'
 ...

这是 cron 的错误输出:

 X-Cron-Env: <SHELL=/bin/bash>
 X-Cron-Env: <PATH=/usr/bin:/bin>
 X-Cron-Env: <LOGNAME=sam>
 X-Cron-Env: <USER=sam>
 X-Cron-Env: <HOME=/Users/sam>
 Date: Mon,  6 Jan 2014 03:15:00 -0600 (CST)
 /Users/sam/deggy/onlineGW.rb:3:in `require': no such file to load -- nokogiri (LoadError)

好的,因为我正在运行 RVM,所以我已将默认 ruby​​ 设置为 1.9.3,并且如上所述,该命令在终端中执行,而不是在 cron 中执行。还有其他环境在玩吗?

很明显,我忽略了一些东西。帮我看看,山姆

【问题讨论】:

    标签: ruby macos cron rvm powerpc


    【解决方案1】:

    我配置了几个不同的操作系统来使用几个 CRON 风格和 RVM。

    我首先尝试RVM's official 解决问题,但在FreeBSD 和Gentoo 下不起作用。我必须手动添加所有相关路径,如下所示,但首先输入 crontab -e 才能启动 crontab 编辑器[1]:

    # atmat's crontab configuration
    SHELL=/bin/bash
    PATH=/home/atma/.rvm/gems/ruby-1.9.3-p0/bin:/home/atma/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/atma/.rvm/rubies/ruby-1.9.3-p0/bin:/home/atma/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.5.3
    RUBYLIB=/home/atma/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1
    GEM_HOME='/home/atma/.rvm/gems/ruby-1.9.3-p0'
    GEM_PATH='/home/atma/.rvm/gems/ruby-1.9.3-p0:/home/atma/.rvm/gems/ruby-1.9.3-p0@global'
    RUBYOPT=rubygems
    
    %nightly,mail(no) * 8-9 /home/atma/.rvm/rubies/ruby-1.9.3-p0/bin/ruby  /usr/local/bin/morula -s username update
    

    以上示例在 Gentoo GNU/Linux 下使用 fcron 是标准 cron 的更灵活、美观和强大的解决方案,但适用于任何 cron。

    [1] 此命令将使用您的默认系统编辑器打开 crontab

    【讨论】:

    • 我没有读过的一件事是 crontab 的配置在哪里。我应该在哪里更新我的配置?
    • 我相信相当于您的配置行已粘贴在 crontab 的顶部。当我的错误返回 `read_nonblock': Connection reset by peer 时,我离得更近了一点。当然,在终端中使用 BASH_ENV=~/.bash_profile && /bin/bash -c '~/.rvm/rubies/ruby-1.9.3-p0/bin/ruby ~/deggy/onlineGW.rb' 有效,所以不是可能是远程服务器阻止了它。
    • 我添加了请求的信息。
    • 我遇到了一个类似的问题,其中一个 shell 脚本(从 cron 运行)正在使用 ruby​​。我必须这样做 export &lt;VARIABLE&gt; 才能工作,以防其他人遇到同样的情况。
    • @WayneWeibel 您使用的是什么操作系统和 Shell?
    【解决方案2】:

    要为cron 作业加载默认的RVM ruby​​ 环境,这是我为用户模式RVM 设置的,假设用户是ohho,主文件夹是/home/ohho。要编辑,请在命令行中输入crontab -e

    MAILTO=""
    SHELL=/bin/bash
    BASH_ENV=/home/ohho/.bash_profile
    HOME=/home/ohho
    
    * * * * * rails -v > /home/ohho/env.txt
    

    最后一行用于测试rails(如果已安装)是否可以正确调用。您还应该检查~/.bash_profile 是否加载了 RVM 环境(这是 bash 的默认设置)。

    SHELLBASH_ENV的详细解释见Daniel's answer

    【讨论】:

      【解决方案3】:

      或者你可以试试

      rvm cron setup # let RVM do your cron settings

      这对我有用。通过https://coderwall.com/p/vhv8aw

      【讨论】:

      • 我需要什么!谢谢!
      • 警告:这会覆盖您现有的 crontab 条目
      • 这对我有用(终于!),但没有覆盖我现有的 crontab (rvm -v = 1.26.11)
      • 有效。没有覆盖我的 crontab 条目!
      • 我希望我们能把它作为答案。它只是悄悄地将必要的 ENV 变量添加到 cron 的顶部。
      猜你喜欢
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多