Djangoで作ったWebアプリをHerokuでデプロイするとmediaが使えなかった。
課題
Djangoで作ったWebアプリをHerokuで公開したら、DEBUG = True の時はmediaからファイルがダウンロードができたけど、本番環境のDEBUG = False にするとmediaからファイルがダウンロードができなくなった。
原因
PaaS(Herokuなど)ではDjangoのmediaは使えない(※使うためには工夫が必要)。
(参照サイト:Djangoで静的ファイルとうまくやる)
解決策
mediaを使う代わりにドロップボックスにファイルをアップロードして共有URLをHTMLにハイパーリンクとして埋め込む。ちなみに、ドロップボックスの共有URLの末尾をdl=0からdl=1に変更すると、強制ダウンロードにすることができる。
<a href="https://www.dropbox.com/<共有ファイル毎のURL>?dl=1">samplefile.pdf</a>
ポイント
対象のWebアプリでのmediaの用途が、adminが上げたファイルを利用者がダウンロードするためにmediaを使っていただけなので、上記の解決策が楽だった。
Webアプリ
DjangoとHerokuを使ってWebアプリを作りました。
→Google Earth上に風車をつくるWebアプリ
【個人メモ】PyCharmでConda環境のDjangoを使用する方法(結論:解決できず。。)
PyCharmのConda環境でDjangoのプロジェクトを作成(下図)しようとしましたが、
エラーが発生(以下は一例)してうまくできませんでした。
Failed to get real commands on module "djangoProject": python process died with code 1: Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pycharm\_jb_manage_tasks_provider.py", line 25, in <module> django.setup() File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\__init__.py", line 19, in setup configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__ self._setup(name) File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 63, in _setup self._wrapped = Settings(settings_module) File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 142, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 783, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "C:\Users\XXX\Dropbox\PycharmProjects\djangoProject\djangoProject\settings.py", line 57, in <module> 'DIRS': [BASE_DIR / 'templates'] TypeError: unsupported operand type(s) for /: 'str' and 'str'
色々とエラーの解決を試みましたが、私の力では解決できませんでした。なので、以下の動画を参考におとなしくVirtualenv環境でDjangoのプロジェクトを作成することにしました。
www.youtube.com
Git Bashでcondaを有効にする方法
1. Git Bash上で以下のコマンドを入力すると、Git Bash上でcondaコマンドが使えるようになります。
$ . /c/users/XXX/anaconda3/etc/profile.d/conda.sh
2. 上記を毎回入力するのが面倒な場合は、以下のコマンドを入力すると、Git Bash起動後すぐにcondaコマンドが使えるようになります。
$ echo ". /c/users/XXX/anaconda3/etc/profile.d/conda.sh" >> ~/.profile
3. 最後に、以下のコマンドを入力してcondaの対象とする環境を指定します
$ conda activate <環境名>
以下の図は問題なく1.~3.の入力ができた場合の例です。(※以下の例のAnacondaの環境名はpythonProjectです。)
PyCharmでJupyterを起動する際のエラー(Notebook kernel doesn't match project interpreter)の解決方法
エラーの内容
Anacondaの環境下でPyCharmを使用する場合に、jupyter notebookのファイル(.ipynb)を作成してコードを実行すると、「Notebook kernel doesn't match project interpreter」というエラーメッセージが出てきた。エラーメッセージに関わらず、PyCharm上で起動しているJupyterは正常に動いている気もしましたが、解決方法を見つけたので記します。
解決方法
1) Anacondaのプロンプトを開く。
2) 以下のコードを入力する。myenvの箇所はプロジェクト環境名に置き換えてください。
conda activate myenv python -m ipykernel install --user --name myenv --display-name "Python (myenv)
例えば、プロジェクト環境名がpythonProjectなら、以下の通りです。(※オレンジの塗りつぶし箇所は個人情報)
3) 最後にPyCharmを再起動すれば、PyCharm上でjupyter notebookのファイル(.ipynb)を実行してもエラーが出ないことが確認できます。もし「Notebook kernel doesn't match project kernel」という新しいエラーメッセージが出た場合は、エラーメッセージと同時に表示される「Update notebook kernel」をクリックすれば解決します。
PDFの文章を自動翻訳する際の小技(改行の対処方法)
課題
PDFの文章をDeepL翻訳やGoogle翻訳にコピペすると、貼り付け後の文章に改行が入っているため翻訳が上手くされない。改行を消したい。
解決方法
ブラウザ(Google Chromeとか)のURL欄にPDFの文章を貼り付けて、再びそれをコピペすると、改行が消える。
wgrib2を使ってGRIB2形式のファイルを読み込む際の落とし穴(Windows)
はじめに
気象データは世界共通フォーマットのGRIB2形式で提供されている場合が多いですが、そのファイルをCSV形式とかに変換する際に、NOAA(アメリカ海洋大気庁)が提供しているwgrib2を使ってデコードする必要があります。ネット上でwgrib2の使用方法を探すことができますが、次の2つの落とし穴に見事にハマってしまいました。
落とし穴1:cygwinでは上手くいかなかった。
NOAAの公式サイトClimate Prediction Center - wgrib2: how to compileではOSがWindowsの場合、cygwinを使うことを勧めています。しかし、cygwinだとwgrib2を使う際にどのコマンドラインやライブラリを別途インストールする必要があるか、いまいち不明瞭(私には分からなかった)で、何回もコンパイルに失敗しました。
落とし穴2:WSLでwgrib2を使う際はbase環境を解除する必要あり
結果的に、私はcygwinではなくWSL上でwgrib2を動かすことに成功しました。しかし、WSLがAnacondaのbase環境になっているとwgrib2が動きませんでした。この場合、以下のコマンドでbase環境を解除する必要がありました。
conda deactivate
ちなみにbase環境に戻したい時は次の通りです。
conda activate base