我有一個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. 如果不在根目錄下運行,Docker cronjob權限不正確
- 4. 從plesk運行cronjob
- 5. 在cronjob中運行Cake Shell的問題
- 6. Cronjob沒有在Linux中運行
- 7. 函數運行不正確
- 8. CCNET運行不正確
- 9. SDL_ttf不正確運行
- 10. 在另一個rake任務中並行運行rake multitask
- 11. PHP循環充當cronjob [確保只有一個實例正在運行]
- 12. PS 1.6:手動運行cronjob
- 13. 運行cronjob覆蓋文件
- 14. 使用Cronjob運行PySpark(crontab)
- 15. cronjob googleAppEngine運行腳本?
- 16. 運行rake任務
- 17. 代碼不會在CronJob中運行時創建文件
- 18. URI正確但在運行時不正確?
- 19. Sunspot_Rails Rake在運行Reindex時中止
- 20. 在cloudfoundry中運行rake命令
- 21. Laravel的cronjob無法正常運行在服務器上
- 22. 在Cronjob上運行ruby硒腳本 - Chrome
- 23. 在heroku上運行每個cronjob的casperjs
- 24. 如何確保一次只有一個rake任務正在運行?
- 25. Cronjob不執行php?
- 26. 當運行rake db時,rails rake運行lib/tasks/scrape.rake:migrate
- 27. 不同的EXE如何在正確的運行時運行?
- 28. 在FSI中運行正確的代碼在運行項目時無法正確運行
- 29. 爲什麼我不能運行rake -f?
- 30. 當我運行'rake db:migrate'時,自定義rake任務正在運行。我如何防止這種情況?
您使用的是RVM嗎? – cbrulak 2011-01-06 17:18:45