Django webappがあり、Herokuスタックで実行されているかどうかを確認したい(デバッグを条件付きで有効にするなど)これを行う簡単な方法はありますか?環境変数、おそらく?
おそらく逆の方法でも実行できることはわかっています。つまり、開発者のマシンで実行されているかどうかを検出しますが、それは「正しく聞こえない」だけです。
ENV varは、これを行う最も明白な方法のようです。存在することがわかっているENV変数を探すか、独自に設定します。
on_heroku = False
if 'YOUR_ENV_VAR' in os.environ:
on_heroku = True
ニールが提案したのと同様に、私は次のことを行います。
debug = True
if 'SOME_ENV_VAR' in os.environ:
debug = False
if 'PORT' in os.environ:
を使用する人もいますが、残念ながら、foreman start
をローカルで実行するとPORT変数が存在するため、フォアマンによるローカルテストとHerokuでのデプロイを区別する方法がありません。
また、次のいずれかのenv変数を使用することをお勧めします。
投稿日現在、Herokuには次の環境変数があります。
['PATH', 'PS1', 'COLUMNS', 'TERM', 'PORT', 'LINES', 'LANG', 'SHLVL', 'LIBRARY_PATH', 'PWD', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'DYNO', 'PYTHONHASHSEED', 'PYTHONUNBUFFERED', 'PYTHONHOME', 'HOME', '_']
私は通常、if 'DYNO' in os.environ:
を使用します。これは、Herokuに最も固有のように思われるためです(他に誰がdynoという用語を使用しますか?)。
また、より明確であるため、if-elseステートメントのようにフォーマットすることも好みます。
if 'DYNO' in os.environ:
debug = False
else:
debug = True
まず、herokuに環境変数ON_HEROKU
を設定します。
$ heroku config:set ON_HEROKU=1
次に、settings.py
で
import os
# define if on heroku environment
ON_HEROKU = 'ON_HEROKU' in os.environ
詳細については、こちらをご覧ください: https://devcenter.heroku.com/articles/config-vars
私の解決策:
$ heroku config:set HEROKU=1
これらの環境変数は永続的であり、デプロイとアプリの再起動の間もそのまま残ります。したがって、値を変更する必要がない限り、設定する必要があるのは1回だけです。
次に、アプリでその存在をテストできます。
>>> 'HEROKU' in os.environ
True
最も信頼できる方法は、上記のように環境変数を設定することです。それが不可能な場合は、ファイルシステムで探すことができる兆候がいくつかありますが、それらは絶対確実ではない/絶対確実ではない可能性があります
Herokuインスタンスにはすべてパス/app
があります。実行中のファイルとスクリプトもこの下にあるため、ディレクトリの存在や、その下からスクリプトが実行されているかどうかを確認できます。
空のディレクトリがあります/etc/heroku
/etc/hosts
にはいくつかのheroku関連ドメインが追加されている可能性があります~ $ cat /etc/hosts <snip>.dyno.rt.heroku.com
これらはいつでも変更される可能性があります。
あなたのマイレージは変わるかもしれません