1

私は多くの同様の質問を読み、これを自分で解決しようと多くの時間を費やしましたが、それでも行き詰まっています。これが私の状況です:

HerokuのDjangoガイド(https://devcenter.heroku.com/articles/django)を読んでいます。私はもともとWindowsから始めましたが、さまざまな問題が発生した後、Linuxに切り替える方がはるかに簡単だと判断しました。ハードドライブをワイプし、Ubuntu12.10とWin7を並べてデュアルブートにインストールしました。すべてがpipでインストールされています(ここでも、Herokuガイドに従います)。PostgreSQLは(おそらく)Herokuと十分に統合されているため、私はPostgreSQLを使用しています。私が試したことに入る前に、ここにエラーがあります(チュートリアルの終わり近くからです):

(venv)wtodom@wubuntu:~/hellodjango$ python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 15, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

絶対パスで設定ファイルを指定して、正しいパスを使用していることを確認しようとすると、次のようになります。

(venv)wtodom@wubuntu:~/hellodjango$ python manage.py syncdb --settings=/home/wtodom/hellodjango/hellodjango/settings.py
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 69, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 8, in <module>
    from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/core/management/sql.py", line 6, in <module>
    from django.db import models
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/db/__init__.py", line 11, in <module>
    if DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
    self._setup()
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/wtodom/hellodjango/venv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings '/home/wtodom/hellodjango/hellodjango/settings.py' (Is it on sys.path?): Import by filename is not supported.

同様の質問の多くで、間違ったsettings.pyファイルを編集する人がいました。私は正しいものを編集したことを知っています。これがその猫です(ちょっと長いので要点を説明します)-https ://gist.github.com/wtodom/4736303。空の文字列を含め、そこにあるデータについて考えられるすべての組み合わせを試しましたが、違いはありません。

私が読んだ他の投稿には、実行しているDjangoバージョンで問題が発生した人がいます。鉱山は完全に新規インストールであるため、そうではありません。

一部の人々は、Djangoが進路をとっていないという問題を抱えていました。プロジェクトのルートディレクトリからPythonシェルを開くと、インポートできるので、そうではありません。

settings.pyファイルに値がない人もいますが、要点からわかるように、私は値を持っています。python manage.py syncdbまた、pgadminを実行してログインしている場合と実行していない場合の両方で、コマンド( )を実行してみました。

その点について、これは私がデータベースを作成してアップしたことを示すpgadminのスクリーンショットです:http://i.imgur.com/CXD2AWo.png

PostgreSQLで\lしたときに得られるものは次のとおりです(SOがフォーマットを強制終了してからのもう1つの要点):https ://gist.github.com/wtodom/4736359

私がそれにいる間、ここに\ duリストがあります:https ://gist.github.com/wtodom/4736442

manage.pyに含まれていることを確認しos.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings")ました。

私がdbをローカルで同期しようとするまで(python manage.py syncdb)、HerokuチュートリアルのすべてがUbuntuで問題なく機能しました。herokuでも同じコマンドを実行でき、正常に動作します(heroku run python manage.py syncdb)。

私が試したり読んだりした関連性のあるものをおそらく忘れていたと思います。私はこの1つのエラーだけで、このことを読んで実行しようとして約6時間を費やしました。他に何をしようか本当にわかりません。

また、私はデータベースと非.NET Web開発に本当に慣れていません(私はプロジェクトに取り組んできましたが、セットアップしたことはありません)。したがって、セットアップの何が問題になっているのかがわかっている場合は、明確にしてください。どうもありがとうございます!

4

1 に答える 1

8

通常、Heroku とローカル マシンでは異なるデータベース設定が必要です。これを処理する一般的な方法は、最初にローカル データベース設定を settings.py ファイルにリストし、コードが現在 Heroku で実行されているかどうかを確認し、実行されている場合は、Heroku が必要とするものでデータベース設定をオーバーライドすることです。 . これにより、単一の settings.py ファイルが両方の環境で機能します。

Heroku は、データベースの URL 文字列を含む DATABASE_URL という環境変数を作成します。コードが Heroku で実行されているかどうかを確認する一般的な方法は、その環境変数を確認することです。次に、存在する場合は、dj_database_url モジュールを使用します。このモジュールは、その文字列を Django の構成に必要な辞書に解析する方法を知っています。

コードで唯一間違っているのは、dj_database_url.config() を呼び出す前に環境変数を最初にチェックしなかったことです。これは、通常は Heroku 内でのみ実行されるはずの dj_database_url が、ローカル マシンでも実行されていたことを意味します。ローカル マシンにはほぼ確実に DATABASE_URL 環境変数が設定されていないため、dj_database_url は空の辞書を返しました。そのため、Heroku で実行されていない場合、コードは空の辞書でローカル データベース構成を上書きしています。Django はそのディクショナリで必要な情報を探しますが、見つからない場合はエラーが発生します。

この問題を解決するには、dj_database_url を使用する前に DATABASE_URL のチェックを追加します。

settings.py の最後にあるこの部分を変更します。

import dj_database_url
DATABASES['default'] = dj_database_url.config()

これに:

if os.environ.get('DATABASE_URL', None):
    import dj_database_url
    DATABASES['default'] = dj_database_url.config()
于 2013-12-21T16:46:17.303 に答える