5

Herokuでスケジュールされたタスクとしてカスタムdjangoコマンドを実行しようとしています。次の方法でカスタムコマンドをローカルで実行できますpython manage.py send_daily_email。(注:カスタム管理コマンド自体に問題はありません)

ただし、Herokuスケジューラアドオンを介してタスクを「実行」しようとすると、Herokuから次の例外が発生します。

Traceback (most recent call last):
  File "bin/send_daily_visit_email.py", line 2, in <module>
    from django.conf import settings
ImportError: No module named django.conf

/bin/send_daily_email.pyにPythonスクリプトを配置しましたが、これは次のとおりです。

#! /usr/bin/python
from django.conf import settings
settings.configure()
from django.core import management

management.call_command('send_daily_email') #delegates off to custom command

ただし、Heroku内では、実行heroku run bin/python(Pythonシェルの起動)を実行して、settingsから正常にインポートすることができます。django.conf

PYTHON_PATH私はそれが私のまたはDjangoの可視性と関係があると確信していSETTINGS_MODULEますが、問題を解決する方法がわかりません。誰かが私を正しい方向に向けることができますか?私がここでやろうとしていることを達成するためのより簡単な方法はありますか?

事前にアドバイスやアドバイスをありがとうございました!Herokuは初めてです!:)

編集:

Nixのコメントによると、私はいくつかの調整を行い、正確なPythonパスを指定することで、Djangoのセットアップを通過したことを発見しました。

私は今受け取ります:

  File "/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 155, in call_command
    raise CommandError("Unknown command: %r" % name)
django.core.management.base.CommandError: Unknown command: 'send_daily_email'

ただし、「heroku run bin / python app/manage.py」を実行すると「send_daily_email」が表示されます。

答えが出たら更新します。

4

2 に答える 2

3

おそらく別のインタプリタを使用しています。

シェルpythonがスクリプト/usr/ bin/pythonで参照しているものと同じであることを確認してください。パスに別のパスがある可能性があります。これは、実行時に機能する理由を説明しますpython manage.pyが、明示的に参照するシェルスクリプトでは機能しない理由を説明します/usr/bin/python


入力which pythonすると、パス上でどのインタプリタが見つかっているかがわかります。

于 2011-12-05T04:05:57.113 に答える
2

さらに、これは、ホームディレクトリをPythonパスに追加することでも解決できます。これを実現するための迅速で目立たない方法は、PYTHONPATH環境変数(通常はHerokuCedarスタックの/app)に追加することです。

herokuconfigコマンドを使用して追加します。

$ heroku config:add PYTHONPATH=/app

それでいいはずです!詳細については、http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/をご覧ください。

于 2012-01-17T05:49:56.940 に答える