Ruby-on-Rails
Cron 無法找到正確版本的 ruby 和 bundler gem
我在 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。