2014-03-27 60 views
0

我試圖在Redmine應用程序中導入電子郵件時在Openshift上設置cron作業。所以,我準備了這樣一個小小的腳本:Rake任務在cron作業中有錯誤的環境Openshift

#!/bin/bash 
rake RAILS_ENV=production -f ${OPENSHIFT_REPO_DIR}/Rakefile redmine:email:receive_imap host=imap.googlemail.com port=993 ssl=1 [email protected] password=yyy ... 

當在ssh連接上手工啓動時,它運行時沒有問題。當由cron運行時,相反,找不到耙子。 進行一些調試,我發現路徑與登錄shell不一樣;即使我使用了rake的完整路徑,發現的ruby版本是1.8(不是每個磁帶盒的1.9),並且每當我設置與shell相同的路徑時,就找不到libruby-1.9。

繼其他一些意見,我嘗試添加以下行部位設定的自定義路徑的:

source /usr/bin/rhcsh 

但儘管如此耙仍然沒有找到。我也嘗試使用bundle exec。

在Openshift上爲cron設置環境的正確方法是什麼,以便它可以像登錄shell一樣運行?

+0

的多個版本擺脫在一個shell腳本,尤其是在cron作業,你不應該依賴在'$ PATH'上,你應該引用'rake'你絕對想要。這是一種安全措施,否則執行特權代碼太簡單了。那樣也不會有路徑問題。 – Patru

回答

1

您可能需要先cd到您的軟件包安裝的目錄(您的Gemfile所在的目錄),可能是這樣的?

cd $OPENSHIFT_REPO_DIR && bundle exec rake ..... 
0

這是cron墨盒中的一個錯誤。你可以參考這個question in SO。這實際上是Python盒式磁帶和cron盒式磁帶的問題。但它是影響所有人的cron墨盒。裏面還有一個OpenShift Bug報告。

這個錯誤就像你所觀察到的,cron盒式磁帶使用Ruby 1.8而不是Ruby 1.9。因此,使用Ruby 1.8的Ruby 1.9中安裝的gem不可用於cron盒式磁帶。

這個錯誤已經有一個錯誤修正,你可以參考OpenShift錯誤報告。但不太確定它是否已經推出。

與此同時,通過導出cron腳本中的PATH和LD_LIBRARY_PATH還有一個臨時解決方法。你可以參考OpenShift Bug報告。

希望這會有所幫助。

0

如果您使用rvm,openshift可能會出現一些問題,以轉移到默認rvm.You也可以嘗試這樣的事情,因此它會在運行bundle之前將rvm設置爲默認值,並且還可以生成您的cron日誌以及獲取您的cron作業的確切身份:

https://rvm.io/rvm/install

使用捆綁高管擺脫耙

cd $OPENSHIFT_REPO_DIR && rvm gemset use "yourgemsetname" && RAILS_ENV=production bundle exec rake cron_job:cron_job --silent >> log/cron_log