Heroku が 2022年11月末から有料になったため、代わりになる Render を使ってみました。
どうにかデプロイできたので、その様子をご紹介します。
Heroku で動いていたものを Render で動かすことができましたが、Railway とは違い、アプリ自体の修正が必要になるケースがありました。
この記事では以下の 2 点を紹介します。
- Anaconda で作った Django アプリを Render にデプロイしたときにハマったことと解決策
- Heroku で動いていたものを Render にデプロイしたときにハマった内容
Render の登録方法などは省略しています。
使用環境: Windows 11、Git、VSCode
こちらも参考にしてください。





- 運用してわかったこと(2023年4月時点)
- 2023年2月のメール通知
- Render にデプロイしたアプリ
- 関連記事
- GitHubとの連携が切れていたので再連携した(2026/2/16 追記)
- Render Dashboard でのデプロイ
- Heroku・Railway でうまくいっていたのに Render でエラーになったこと
- /usr/bin/env: ‘bash\r’: No such file or directory
- Not Found: /(デプロイ失敗)
- app.models.モデル名.DoesNotExist: モデル名 matching query does not exist.
- relation “モデル名” does not exist
- 細かいところまでチェックされてデプロイ失敗になる
- 別プロジェクトでも同じモデル名・アプリ名だと動作がおかしい
- 5秒ごとに “GET / HTTP/1.1” 200 が発生する(ヘルスチェック)
- 502 Bad Gateway(デプロイ成功後に 400 エラーが連発してデプロイ失敗)
- Worker (pid:xxx) was sent SIGKILL! Perhaps out of memory?
- SQLite3 から PostgreSQL へ変更する方法
- SQLite3 で最初から動かす場合
- SQLite3 でデータが保存されない理由
- まとめ
運用してわかったこと(2023年4月時点)
- 無料プランは起動がとても遅い(スリープ後の復帰に数十秒〜数分かかる)
- データの保存ができない(最初の90日間は PostgreSQL が使えたが、以降はデータが消える)
- 有料プランにしないとこれらの問題は解消できません。
2023年2月のメール通知
以下のメールが届き、90日経過後に PostgreSQL データベースへアクセスできなくなりました。
Your free Render PostgreSQL database, django_render_db, will be suspended on 2023-02-17.
The database will become inaccessible unless you upgrade to a paid plan.
SQLite3 を使っているから大丈夫と思っていましたが、データが保存されなくなったりエラーが発生したりしました。
→ 対処法は「PostgreSQL → SQLite3」セクションを参照。
Render にデプロイしたアプリ
Renderにデプロイしたアプリ一覧↓
関連記事
- Render 無料が遅い理由:https://kikuichige.com/22516
- Render に最も簡単なアプリをデプロイする手順(Render 公式ベース):https://kikuichige.com/18881
- イチゲブログ掲示板(CSV をシンクラウド for Free 保存)(表示まで数分かかる場合あり。毎月20〜末日は停止。):


ヒント: ローカルで Django アプリを作る場合はエディタに VSCode を使うことをおすすめします。
Render で使うbuild.shの改行コードを LF にしないとエラーになりますが、VSCode なら簡単に変換できます。方法は後述。
GitHubとの連携が切れていたので再連携した(2026/2/16 追記)
久しぶりにデプロイしたら GitHub との連携が切れていました。以下の手順で再接続できました。
1. GitHub 側で Render の権限を一度削除する
GitHub 右上のアイコン → Settings → Applications → Installed GitHub Apps → Render → Configure → 最下部の Uninstall(削除)
Applicationsに戻ってAuthorized GitHub Apps タブに Render が残っていたら同様に削除。
2. Render 側で再接続する
- 画面右上のプロフィールアイコン → Account Settings
- Git Deployment Credentials セクションを開く
- 「Add credential」 をクリック
- 「GitHub」 を選択
- GitHub の認証画面が開くので、Render へのアクセスを許可
完了すると、GitHub Apps として Render が再登録され、リポジトリの一覧が表示されるようになります。
Render Dashboard でのデプロイ
こちらを参考にしてください。







Heroku・Railway でうまくいっていたのに Render でエラーになったこと
/usr/bin/env: ‘bash\r’: No such file or directory
build.sh の改行コードが LF になっていないと発生します。
対処法: VSCode で build.sh を開き、右下の改行コード表示(CRLF / LF)をクリックして LF に変更します。
※ VSCode で *.sh ファイルを新規作成した場合は自動的に LF になるため、変更不要です。
Not Found: /(デプロイ失敗)
ルート URL(/)に対応する処理がないとデプロイが失敗します。
対処法: プロジェクトの urls.py にルートの処理を追加します。
urlpatterns = [
path('', ~), # ← これがないとデプロイ失敗になる
]
理由: Render の Health Check Path に / が設定されており、/ へのリクエストに 200 OK が返ってこないとエラーになります。また、ヘルスチェック自体を止めればでない。
app.models.モデル名.DoesNotExist: モデル名 matching query does not exist.
デプロイ直後にアプリが起動した際、データオブジェクトが存在しない状態で処理が走るとデプロイ失敗になります。
Heroku では事前に Python シェルや admin からデータを作成できましたが、Render では起動と同時に処理が走ります。
対処例:adminのスーパーユーザーを起動時に作成する方法




SQLite3 を使う場合: ローカルでデータを入力しておけばデプロイ後もそのまま使えます。
ただし、.gitignoreでdb.sqlite3を除外していると GitHub にプッシュされないため、除外設定を外す必要があります。
relation “モデル名” does not exist
admin やAPIでモデルにアクセスすると発生することがあります。migrate が正常に適用されていないことが原因です。
例:relation "article_vtfyarticle" does not exist(articleはアプリ名、vtfyarticleはモデル名)
対処法: build.sh の migrate コマンドを以下のように変更します。
# 変更前
python manage.py migrate
# 変更後(article はアプリ名)
python manage.py migrate --fake article zero
python manage.py migrate article
デプロイログで article.0001_initial が正常に適用されているか確認できます。
Apply all migrations: article
Running migrations:
Applying article.0001_initial... OK
参考:django.db.utils.ProgrammingError: relation does not exist(Stack Overflow)
細かいところまでチェックされてデプロイ失敗になる
HerokuやRailway ではスルーされていた部分まで Render ではチェックされます。デプロイ失敗になると先に進めないのが難点です。
発生例:
The JS file 'app_cal/js/chunk-vendors.17cbe1d3.js' references a file which could not be found:
app_cal/js/chunk-vendors.17cbe1d3.js.map
.map ファイル(デバッグ用)がないというエラーです。
対処法: 該当 JS ファイル末尾の以下の行を削除します。
//# sourceMappingURL=app.e34c0f45.js.map
別プロジェクトでも同じモデル名・アプリ名だと動作がおかしい
Heroku や Railway では問題なかったのに、別プロジェクトで同じモデル名やアプリ名を使っていると干渉してしまうことがあります。アプリを作り直して解決しました。
5秒ごとに “GET / HTTP/1.1” 200 が発生する(ヘルスチェック)
Render が5秒おきにルートにアクセスしてヘルスチェック(kube-probe)を行っています。
アクセスカウンターのようなアプリでは正確なカウントができなくなるため注意が必要です。
根本原因: 上述の「Not Found: /」と同様、urls.py でルートに処理を追加したことでヘルスチェックのアクセスが記録されるようになります。
応急対処: Dashboard → Settings → Health Check Path を空欄にするとヘルスチェックが止まります。
502 Bad Gateway(デプロイ成功後に 400 エラーが連発してデプロイ失敗)
ログでは最初デプロイ成功と表示されるのに GET / HTTP/1.1" 400 が連発し、最終的に deploy failed になります。
原因と対処法:
settings.py の ALLOWED_HOSTS の設定が原因でした。
# ❌ ダメだった設定
ALLOWED_HOSTS = ['.onrender.com', 'localhost-abc-1.paiza-user-free.cloud', '.herokuapp.com']
# ❌ ワイルドカードも動くが非推奨
ALLOWED_HOSTS = ['*']
# ✅ 最終的にOKだった設定
ALLOWED_HOSTS = ['vtfy2article2.onrender.com', '127.0.0.1']
ログに以下が出ていたため、'127.0.0.1' を追加しました。
Invalid HTTP_HOST header: '127.0.0.1:10000'. You may need to add '127.0.0.1' to ALLOWED_HOSTS.
127.0.0.1 は localhost と同じ「ループバックアドレス(自分自身を指す IP)」です。
Worker (pid:xxx) was sent SIGKILL! Perhaps out of memory?
たまに Server unhealthy になってログに上記エラーが出ていました。直前に以下のログがありました。
Matplotlib is building the font cache; this may take a moment.
Matplotlib がメモリを大量消費してエラーになっていたようです。
対処法: 不要な matplotlib のインポートをコメントアウトしました。
# import matplotlib # ← コメントアウト
# matplotlib.use('Agg') # ← コメントアウト
import matplotlib.pyplot as plt # ← これだけで動いた
関連記事:


SQLite3 から PostgreSQL へ変更する方法
簡単に切り替えられますが、実際に PostgreSQL で動いているか確認しづらいです。エラーにはなりませんでした。
settings.py の変更:
import dj_database_url
# DATABASES = {
# "default": config("DATABASE_URL", default=default_dburl, cast=dburl),
# }
DATABASES = {"default": dj_database_url.config()}
conn_max_ageを指定する場合もあります(例:dj_database_url.config(conn_max_age=600))。書かなくても動きました。
参考:
- https://render.com/docs/deploy-django
- https://github.com/yeconnect/deploy_django_on_render/blob/main/config/settings.py
SQLite3 で最初から動かす場合
現在私が運用しているこの方法では、ローカルで作った db.sqlite3 は更新保存されません(理由は後述)。
シンプルに運用できるため紹介しておきます。
ローカルで事前準備
python manage.py makemigrations # ← migration フォルダができないときはアプリ名を最後に追加
python manage.py migrate
python manage.py createsuperuser
その後アプリを起動してデータベース(db.sqlite3)にデータを入れておきます。
build.sh
set -o errexit
pip install -r requirements.txt
python manage.py collectstatic --no-input
SQLite3 でデータが保存されない理由
SQLite3 はデータを db.sqlite3 ファイルに保存しています。
Render でデータが残らない原因は、更新された db.sqlite3 ファイルが永続化されないためです。
Railway と Render の違い
| Railway | Render | |
|---|---|---|
| スリープ | しない(20日間) | する(一定時間後) |
| SQLite3 のデータ | 維持される | 再起動のたびにデプロイ時の状態に戻る |
| 起動速度 | 速い | 遅い(30秒〜数分) |
Render は再起動するたびにデプロイ時と同じ状態に戻るため、途中で追加されたデータが消えてしまいます。
CSV ファイルでデータ保存も試みましたが、同様にファイルが保存されないため意味がありません。
→ Railway や Render で永続的なデータ保存をするには、有料の PostgreSQL などを使う必要があります。
まとめ
気づいたことがあれば随時更新します。
- Heroku・Railway ではハマらなかった内容で Render ではハマった
- 別プロジェクトでも同じデータベースのモデル名・アプリ名を使っていると干渉する
- 5秒おきのヘルスチェックがアクセスカウンターなどの動作に影響する
- スリープ状態からの起動に数分かかることがある
- Blueprints の Status が
Sync failedでもとりあえず動く(現在は Blueprints を削除して使用) - 3カ月後に PostgreSQL が使えなくなる。SQLite3 に切り替えてもデータは残らない
(スリープすると SQLite3 のデータは GitHub にプッシュした時点の状態に戻る)
この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)
目次へ
コメント