通过命令行将参数传递给 FastAPI 应用程序的方法
Way to pass arguments to FastAPI app via command line
我正在为我的 FastAPI 应用程序使用 python 3.8.0。
它使用位于项目目录根目录中的 .env
文件。我正在使用 dotenv 包,.env
文件的位置在应用程序中是硬编码的。这是我的单元文件
[Unit]
Description=Gunicorn instance for my_app
After=network.target
[Service]
User=nginx
Group=nginx
WorkingDirectory=/usr/share/nginx/html/my_app/
Environment="PATH=/usr/share/nginx/html/my_app/venv/bin"
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn --bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app
[Install]
WantedBy=multi-user.target
挑战在于 运行 同一应用程序的两个版本(生产和测试)在两个不同的端口上使用两个不同的 .env
。我必须创建第二个单元文件。但是我怎样才能将两个不同的 env 文件名的名称传递给应用程序以供进一步使用。这些文件包含数据库连接等。
我想象它大致是这样的
第一单元文件
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn
--bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app --env_file_name=".env.prod"
第二单元文件
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn
--bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app --env_file_name=".env.dev"
您可以在单元文件配置中设置 systemd 读取进程环境的路径。 The setting is calledEnvironmnetFile=
。只需将选项设置为一个单元文件中 .env.prod
的路径和另一个 .env.test
的路径。
我正在为我的 FastAPI 应用程序使用 python 3.8.0。
它使用位于项目目录根目录中的 .env
文件。我正在使用 dotenv 包,.env
文件的位置在应用程序中是硬编码的。这是我的单元文件
[Unit]
Description=Gunicorn instance for my_app
After=network.target
[Service]
User=nginx
Group=nginx
WorkingDirectory=/usr/share/nginx/html/my_app/
Environment="PATH=/usr/share/nginx/html/my_app/venv/bin"
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn --bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app
[Install]
WantedBy=multi-user.target
挑战在于 运行 同一应用程序的两个版本(生产和测试)在两个不同的端口上使用两个不同的 .env
。我必须创建第二个单元文件。但是我怎样才能将两个不同的 env 文件名的名称传递给应用程序以供进一步使用。这些文件包含数据库连接等。
我想象它大致是这样的
第一单元文件
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn
--bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app --env_file_name=".env.prod"
第二单元文件
ExecStart=/usr/share/nginx/html/my_app/venv/bin/gunicorn
--bind unix:/usr/share/nginx/html/my_app/my_app.sock -w 4 -k uvicorn.workers.UvicornWorker app.main:app --env_file_name=".env.dev"
您可以在单元文件配置中设置 systemd 读取进程环境的路径。 The setting is calledEnvironmnetFile=
。只需将选项设置为一个单元文件中 .env.prod
的路径和另一个 .env.test
的路径。