FastAPIで作成したAPIをRailwayでデプロイしたときにハマったことと解決策

公開日:2024年1月16日

FastAPIで作成したAPIをRailwayでデプロイしたときにハマったことと解決策

RailWayとは?

アプリケーションのデプロイプラットフォームです。
FastAPIで作成したデプロイをするときに使用したのですが、エラーが出たので解決方法をメモしておきます。
Githubで連携するだけではうまくいかず、Railwayで使用できるpythonのバージョン指定が必要だったようです。

セッティングについて

最終的にURL以外は、ほぼ設定していません。
代わりにrailway.jsonを設定しています。

railway.json

railwayでデプロイ時に用いる設定値をまとめた設定ファイルです。
配置場所は、プロジェクトのroot直下です。
APIのメインソースはmain.pyに書いています。

railway.json の記載内容

{
  "$schema": "https://railway.app/railway.schema.json",
  "build": {
    "builder": "NIXPACKS"
  },
  "deploy": {
    "startCommand": "uvicorn main:app --host 0.0.0.0 --port $PORT",
    "restartPolicyType": "ON_FAILURE",
    "restartPolicyMaxRetries": 10
  }
}

$PORT が文字列として認識されるエラーが発生

pyproject.toml と .python-versionでpythonのバージョンを指定すると解決しました。

pyproject.toml

[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.80.0"
uvicorn = "^0.18.3"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

.python-version

3.10.7

railwayのマニュアル

こちらにて
https://nixpacks.com/docs/providers/python