我有一個rake文件,它可以在命令行中成功執行。當我設置一個cronjob來運行這個rake文件時,「require'json'」行失敗。我的猜測是cronjob有一個不同的env變量。當我試圖在Ruby腳本中放置「puts ENV」時它不起作用。所以我想知道我該怎麼做來檢查不同的env變量以及如何解決這個問題。謝謝。Rake在cronjob中運行不正確
回答
你有
require 'rubygems'
在腳本
?例如。 irb
默認加載rubygems,而正常執行需要顯式導入。
是的,我確實需要'rubygems'。如果我在命令行運行,rake data.rake,沒問題。錯誤只發生在cronjob上。 – swingfuture 2009-06-05 15:57:38
第一:require "json"
可能因爲rubygems未加載而失敗。您可以通過將require 'rubygems'
放置在頂部,或將RUBYOPT=rubygems
添加到cron作業命令行的前面或cron的環境(通常可以在crontab中設置環境變量)來解決該問題。
回答您的ENV
調試問題:puts ENV
可能不起作用,因爲stdout會在cron作業期間重定向到您不知道的地方(它肯定無法進入您的終端)?你可以嘗試,而不是執行以下操作:
File.open('/tmp/debug_env', 'w') do |f|
f.puts ENV.to_hash.inspect
end
然後看看在/tmp/debug_env
,看看那裏的東西。尤其要注意的環境變量是$USER
,$GEM_HOME
,$GEM_PATH
,$RUBYOPT
。
首先,我已經加載了rubygems,第二,我嘗試了你的建議,在cronjob的前面添加RUBYOPT = rubygems,同樣的錯誤。我會嘗試ENV調試。 – swingfuture 2009-06-05 16:14:20
這可能是你如何在cron中調用它。下面是我的什麼作品:
cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
這樣做的另一種方式:編寫一個包裝腳本從cron運行: 第一線 - 加載你的.profile文件(或.bash_profile文件等) 第二行 - 運行耙腳本
- 1. rake db:migrate正確運行所有遷移
- 2. cronjob不能正確執行腳本
- 3. Railities運行我的Rails在使用不正確的Rake版本
- 4. syslog顯示cronjob正在運行
- 5. 如果不在根目錄下運行,Docker cronjob權限不正確
- 6. Cronjob cron.daily不運行(debian)
- 7. bundle exec rake不能在cron中運行
- 8. 在cygwin下運行Cronjob
- 9. 從plesk運行cronjob
- 10. 在cronjob中運行Cake Shell的問題
- 11. Cronjob沒有在Linux中運行
- 12. 進程運行不正確
- 13. CCNET運行不正確
- 14. move_uploaded _file運行不正確
- 15. 函數運行不正確
- 16. SDL_ttf不正確運行
- 17. 在另一個rake任務中並行運行rake multitask
- 18. 運行rake任務,在Heroku
- 19. jquery在Joomla上運行不正確
- 20. 的cronjob沒有運行
- 21. PS 1.6:手動運行cronjob
- 22. 如何從cron.d運行cronjob?
- 23. 的cronjob沒有運行
- 24. 使用Cronjob運行PySpark(crontab)
- 25. java通過cronjob運行jar
- 26. cronjob沒有與codeigniter運行
- 27. 運行cronjob覆蓋文件
- 28. 將shell作爲cronjob運行
- 29. cronjob googleAppEngine運行腳本?
- 30. Cronjob - 運行腳本和Python
您使用的是RVM嗎? – cbrulak 2011-01-06 17:18:45