Ruby-on-Rails

Cron 無法找到正確版本的 ruby 和 bundler gem

  • December 16, 2011

我在 EC2 實例上為 rails 應用程序執行了 cron,但它失敗並出現錯誤 -

/bin/bash: bundle: command not found

如果我使用有效的 ubuntu 使用者或 sudo 使用者執行 bundle 命令。我使用 crontab -e 命令添加了 cron。

我做了一些故障排除(也顯示與 sudo 相同的結果)-

> which ruby
/usr/local/bin/ruby

> which bundle
/usr/local/bin/bundle

但是,如果將這些命令添加為 crontab 中的 which ruby​​ 和 which bundle 並將其輸出到日誌中,它會顯示 -

克朗有 -

* * * * * /bin/bash -l -c 'which ruby >> /home/ubuntu/logs/cron.log 2>&1'
* * * * * /bin/bash -l -c 'which bundle >> /home/ubuntu/logs/cron.log 2>&1'

輸出 -

/usr/bin/ruby
/bin/bash: bundle: command not found

所以基本上我的 cron 從系統中獲取了錯誤的紅寶石,我應該怎麼做才能糾正它?我想從我的 /usr/local/bin/ruby 中獲取 ruby​​,然後它也可以找到 bundle。

謝謝 !!

您可以指定完整路徑,如 Thince 註釋。

您還應該能夠在 crontab 頂部設置 PATH:

PATH=$PATH:/usr/bin:/bin:/usr/local/bin
* * * * * ruby /home/ubuntu/scripts/ruby.rb >> /home/ubuntu/logs/cron.log 2>&1'
* * * * * bundle exec unicorn >> /home/ubuntu/logs/cron.log 2>&1'

實際上,我看到您在 /usr/bin 和 /usr/local/bin 中安裝了 ruby​​。在這種情況下,如果您想要特定的 ruby​​,請完全指定路徑。使用上面編寫的 cron,由於 PATH 順序,您將執行 /usr/bin/ruby 而不是 /usr/local/bin/ruby。

引用自:https://serverfault.com/questions/339545