2013-12-09 180 views
4

我有一個python腳本,我只需要運行一次(我不想將它提交到repo發送到Cedar實例)。如何在Heroku上執行python腳本?

腳本通過我的Django模型聚合數據並輸出一個.csv文件。

通常在AWS中,我將scp腳本傳送到服務器,manage.py shell < script.pyscp將生成的.csv發回我的機器。

我知道Heroku文件系統是短暫的,但有沒有辦法在Heroku服務器上檢索生成的文件而無需上傳到S3?

這是我最好的拍攝:

cat script.py | heroku run manage.py shell --app appname 

工程的一個行腳本,但不換行。

另外,上面的腳本只會產生命令行輸出,不會返回一個.csv文件。

回答

2

Heroku不會爲您的dyno上的任何位置授予寫入權限(它只會寫入您在推送更新時從主分支中檢出的文件以及任何依賴項)。你必須上傳你的輸出到S3,保存到日誌,或找到一些其他的交付機制(電子郵件?)

+0

謝謝。這節省了我的時間。 – Prashanth

3

我想在heroku中手動執行一次python腳本。這就是它是如何工作的:

  1. 在腳本
  2. 添加一行django.setup()在你的Python腳本import django
  3. shell命令(即要能使用在Django創建的模型是非常重要的)(必須是在你的git倉庫執行):heroku run bash
  4. bash命令:export DJANGO_SETTINGS_MODULE=projectsname.settings
  5. bash命令:cd projectsname
  6. 慶典條命令:python yourscriptname.py
1

你快到了。您遇到的問題與典型的shell語法如何工作更相關。

您有cat script.py | heroku run manage.py shell --app appname哪些管道在腳本中沒有換行符。

爲了讓你的換行符試試這個。

herkoku run python -c "`cat script.py`" --app appname 

關鍵是將反引號用雙引號括起來,這樣腳本中的換行符就被保留下來了。