【问题标题】:Deploy ready Django application on Heroku servers在 Heroku 服务器上部署准备好的 Django 应用程序
【发布时间】:2014-10-18 08:37:10
【问题描述】:

我已经使用 Python Django 开发了一个应用程序并且它正在运行,我是 Python Django 的新手,现在我需要将它部署在 heroku 服务器上,有很多博客和网站,包括 heroku 网站,这些网站解释了如何部署 django 应用程序heroku 从头开始​​我还没有找到任何关于正在运行的应用程序的讨论

例如,他们都需要安装 django,这让我很困惑,

这是我的应用程序的文件夹结构:

 myapp
 |_my_app
 | |_Settingd.py
 | |_urls.py
 | |_wsgi.py
 |__webapp
    |_statics(folder) 
    |_admin.py
    |_models.py
    |_views.py

应用程序正在本地连接到mysql服务器

问题:

现在我完全糊涂了,我该如何在 heroku 上部署我正在运行的应用程序?在下面提供的在 heroku 上部署应用程序的步骤中,哪些对我是强制性的,哪些我可以逃脱,根据我的文件夹结构,requirements.txt 或 Procfile 的位置应该在哪里,它们的内容应该是什么?

https://devcenter.heroku.com/articles/getting-started-with-django

我必须安装 virtualenv 吗?是的,我应该在哪里运行这个命令(在哪个文件夹中) 我想我不必为 django 安装 django 或任何数据库 api 或驱动程序?因为它们都已经安装了

【问题讨论】:

  • @rajasimon 也许我和其他初学者的答案对你来说并不那么明显,所以如果可以的话,请给出一个信息丰富的答案
  • 我投了反对票,因为您实际上链接到页面,其中 exact 回答了您的问题。只需按照那里的说明进行操作即可。
  • @DanielRoseman 我认为对于初学者来说文档不清楚,特别是当您尝试在 Windows 机器上关注页面时,所以如果我在运行的 Django 应用程序的根目录中定义 Procfile 和要求,让我们重新表述一下自己,我仍然需要虚拟环境吗?我真的不知道它是干什么用的
  • @Siavosh 该文件清楚地写着Start a Django app inside a Virtualenv,如果你正在按照那个教程..pip install django-toolbelt。我想你在这里混淆了为什么它再次安装 django ?
  • @Siavosh 您不需要在 Heroku 上使用 virtualenv。 Heroku 只需要您在 git 中的项目以及 requirements.txt 文件,该文件应列出所有项目依赖项,包括 Django。换句话说,Heroku 是一个virtualenv,您将在其中使用 git 部署您的应用程序。您需要toolbelt 才能使用命令行连接到 Heroku。要使用 MySQL 数据库,您需要获取任何像 clearDB MySQL 这样的附加组件,一旦您添加了一个附加组件,Heroku 就会设置一些环境变量,可以使用教程中提到的 dj_database_url 读取这些环境变量。

标签: django heroku django-deployment


【解决方案1】:

所以你的第一个问题是为什么应用应该在 Virtualenv 中运行?

第一步是什么?安装 Django,对吧?不完全的。将包直接安装到当前站点包区域的一个常见问题是,如果您有多个项目或在您的机器上使用 Python 来处理 Django 以外的其他东西,您可能会遇到应用程序和已安装包之间的依赖关系问题。出于这个原因,我们将使用virtualenv 来管理我们的Django installation。这是 Python 和 Django 用户常见且推荐的做法。

然后使用此命令安装并激活您的 virtualenv...

$ virtualenv env

$ source env/bin/activate

最后我们激活了环境。现在它看起来像这样

(env)rs@rajasimon-desktop:~/studio/Project$

那么我猜你的第二个疑问是安装 django-toolbelt 的目的是什么?

如果您正在安装 django-toolbelt,它将安装所有需要的依赖项或包。

它包含 Django、psycopg2、gunicorn、dj-database-url、dj-static、static

首先 Heroku 原生使用 postgres。如果您在本地使用它,您的生活会更轻松。

如果你真的想使用mysql,你有两条路可以走。

1) 在本地运行 mysql,但在使用 mysql2psql gem 迁移到 Heroku 时转换为 postgres,如下所述:https://devcenter.heroku.com/articles/heroku-mysql

2) 使用像https://addons.heroku.com/cleardb这样的mysql插件

但是我的建议是端到端使用 postgres,因为它已融入 Heroku,您将使用默认的 Heroku 使用方式,而不是反对

这是我正在工作的项目包

(env)ri@rajasimon-desktop:~/studio/project$ pip freeze
Django==1.6.5
MySQL-python==1.2.5
Pillow==2.5.3
argparse==1.2.1
django-ckeditor-updated==4.2.8
wsgiref==0.1.2

requirements.txt 和 Procfile 的位置应该在哪里?

如何制作 requirements.txt 文件 ?

通过运行以下命令将自动将所有包包含在 txt 文件中。

pip freeze > requirements.txt

用 Procfile 声明进程类型

procfile 用于在生产时启动测功机。我总是喜欢这样..

web: gunicorn project.wsgi

所以最后你的项目结构会是这样的

myapp
 |_my_app
 | |_Settingd.py
 | |_urls.py
 | |_wsgi.py
 |__webapp
 |   |_statics(folder) 
 |   |_admin.py
 |   |_models.py
 |   |_views.py
 |__manage.py
 |__requirements.txt
 |__Procfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2017-10-21
    • 2011-12-05
    • 1970-01-01
    • 2015-06-12
    • 2015-04-10
    相关资源
    最近更新 更多