2012-01-26 8 views
2

私はHerokuにDjangoアプリケーションをデプロイしました。アプリケーション自体は正常に動作します。私はheroku run python project/manage.py syncdbheroku run python project/manage.py shellのようなコマンドを実行することができ、これはうまく動作します。HerokuでホストされているDjangoプロジェクトのサブディレクトリから非djangoコマンドを実行していますか?

私のDjangoプロジェクトは、ScrapyというPython Webスクレイピングライブラリを利用しています。 Scrapyには、scrapy crawl abcというコマンドが付属しています。これは、私がscrapyアプリケーションで定義したWebサイトをスクラップするのに役立ちます。ローカルマシンでscrapy crawl spidernameのようなscrapyコマンドを実行すると、アプリケーションは日付をスクラップしてデータベースにコピーできます。しかし、私がプロジェクトディレクトリheroku run scrapy crawl spidernameのサブディレクトリの下でHerokuで同じコマンドを実行すると、何も起こりません。

私は私が間違っているつもりだ場所を指すことができHerokuのログに何も表示されません。

2012-01-26T15:45:38+00:00 heroku[run.1]: State changed from created to starting 
2012-01-26T15:45:43+00:00 app[run.1]: Awaiting client 
2012-01-26T15:45:43+00:00 app[run.1]: Starting process with command `project/spiderMainDir scrapy crawl spidername` 
2012-01-26T15:45:44+00:00 heroku[run.1]: State changed from starting to up 
2012-01-26T15:45:46+00:00 heroku[run.1]: State changed from up to complete 
2012-01-26T15:45:46+00:00 heroku[run.1]: Process exited 

いくつかの追加情報を:

マイscrapyアプリは掻き取りアイテムを保存するpipelines.pyを呼び出しますデータベースに転送します。 pipelines.pyファイルでは、モデルをインポートしてデータをデータベースに保存できるように、Django設定を呼び出すために書いたものです。

import os,sys 
PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 
sys.path.append(PROJECT_PATH) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

どこのポインタが間違っていますか? Herokuでscrapyコマンドを実行すると、アプリケーションは外部Webサイトを掻き出し、そのデータをデータベースに保存できます。外部コマンドが - heroku run commandのようにHerokuで実行される方法ではありませんか?

答えて

3

私は問題が何かを発見したので私自身の質問に答えています。何らかの理由でHerokuがサブディレクトリからコマンドを実行したときにscrapyを見つけられませんでした。最上位のディレクトリではありませんでした。

コマンドheroku run ...は、通常、最上位ディレクトリから実行されます。治療を使用している私のプロジェクトでは、私はサブディレクトリに移動し、サブディレクトリからscrapyコマンドを実行する必要がありました(これは治療法の設計方法です)。これはHerokuでは機能しませんでした。そこで、私はHeroku bashにheroku run bashと入力して何が起こっているのかを調べました。 scrapyコマンドを最上位ディレクトリから実行したとき、Herokuはコマンドを認識しましたが、サブディレクトリに移動したときにscrapyコマンドを認識できませんでした。パスに関連した問題があると思います。サブディレクトリから、それを実行できるように完全なパスをscrapy~/bin/scrapy crawl spidername)に指定する必要がありました。

毎回手動でHeroku bashに手を加えずにscrapyコマンドを実行するには、次のコードを含むシェルスクリプトを作成し、トップレベルディレクトリのbinディレクトリに配置してプッシュしたHerokuへの変更。

ビン/ scrapy.sh:これが行われた後

#!/usr/bin/env bash 
cd ~/project/spiderSubDirectory 
~/bin/scrapy [email protected] 

、私は私の地元のbashから$ heroku run scrapy.sh crawl spidernameを実行する可能性があります。私はそれが最高の解決策ではないと思うが、これはうまくいく。

0

herokuのように外部コマンドを実行する方法ではありません appdirコマンド?

それは実際にheroku run commandです。 appdirをそこに含めると、無効なコマンドが発生しました。 Herokuの出力では、これらのコマンドが失敗したときに便利なエラーメッセージが表示されず、代わりにコマンドが完了したことがわかります。だからあなたのために、コマンドを次のようなものに変更してください:

heroku run scrapy crawl spidername 
+0

こんにちは。問題は、サブディレクトリから 'heroku run'を実行していたことです。サブディレクトリから 'heroku run scrapy crawl spidername'を実行しようとしていて、動作しなかったという点で、私の質問はあまり明確ではありませんでした。私は、回避策に対処する答えを追加しました。 –

関連する問題