【问题标题】:Updating Django App on server在服务器上更新 Django 应用程序
【发布时间】:2015-10-10 12:04:44
【问题描述】:

我对 Python/Django 比较陌生,并且已经成功部署了我的第一个应用程序。我现在想用一些新的变化来更新它,但我不确定正确的过程是什么。我的设置是 ubuntu/nginx/gunicorn/postgres。

目前我正在采取以下步骤:

  1. 停止 nginx:sudo service nginx stop
  2. 停止 gunicorn:sudo service gunicorn stop
  3. 备份数据库? (未实现 - 在服务器上找不到)
  4. Git 拉动
  5. python manage.py 迁移
  6. python manage.py collectstatic
  7. 重启 gunicorn:sudo service gunicorn start
  8. 重启nginx:sudo service nginx restart

这是可行的,但如果这是完整、最准确和最安全的方法,我将不胜感激?

【问题讨论】:

  • 备份不是您在更新时执行的操作,而是您定期(每天/每周)执行的操作。并且没有必要停止 nginx。
  • 您要自动更新吗?我可以推荐Fabric。但是为什么更新django的时候一定要停止nginx呢?
  • 我只是停止了 nginx,因为我认为有必要停止服务请求,但我现在将删除该步骤 - 谢谢

标签: django postgresql nginx gunicorn


【解决方案1】:

进行应用更新的一种懒惰(但推荐专业)方式是运行自动化脚本,例如FabricAnsible

但是,如果您希望继续手动方式(这很乏味),您可以执行以下操作:

  • 从 git 中拉取
  • 运行迁移python manage.py migrate(这应确保您在本地对模型所做的更改反映在生产数据库中)
  • 运行静态集合以确保新的静态数据反映在服务器 /static/ 文件夹中,如下所示:python manage.py collectstatic
  • 然后,重新启动您的 Django 服务器 而不是 Nginx。比如:sudo service your_django_server_running_instance restart

例如在 digitalOcean 上(使用一键安装时),您的 django 服务器运行实例可能称为 gunicorn

那么你可能也想看看automating your postgresql db

【讨论】:

  • 我还没有了解到在服务器上运行 makemigrations不是一个好习惯。假设这是不好的做法,然后问:“您将如何将模型更改为 DB?”因为没有更新数据库的神奇方法,无需访问数据库
  • @RunLoop 是正确的。你应该在 dev 本地运行 makemigrations,提交到源代码管理,推送到服务器,然后在那里运行 migrate。
  • @DanielRoseman 好的。我不知道,但任何解释为什么这是最好的方法?我很好奇
  • 因为迁移是源代码的一部分,需要在 repo 中。您不应该在服务器上生成它们。迁移的要点是确保你的 dev 和 prod 数据库是相同的;单独生成它们会破坏这一点。
  • 好的,我明白了。说得通。谢谢
猜你喜欢
  • 2021-11-26
  • 2017-10-21
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多