在Heroku上部署Django应用程序[第一部分]
首先
作为在Heroku上运行Django应用的备忘录,我将记录第一步骤:在Heroku上展示Django应用的启动页面(It Work页面)。
下次将Django应用程序部署到Heroku[第二部分]
我所使用的环境
-
- macOS Sierra 10.12.5
-
- Python 3.6.1
- virtualenv 15.1.0
必需品
-
- Herokuアカウント
-
- 参考:Heroku初心者がHello, Herokuをしてみる
-
- virtualenvのインストール(python3環境にインストールされていること)
- 参考:virtualenvでpython環境を管理する
制作此次应用程序的结构
本次制作的应用将按照以下结构进行。
myProject
├── venv
├── Procfile
├── db.sqlite3
├── manage.py
├── myDjango
│ ├──__pycache__
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── requirements.txt
└── runtime.txt
根目录名称:myProject
Django项目名称:myDjango
操作步骤
创建一个Django应用程序
创建并移动项目目录
$ mkdir myProject
$ cd myProject
构建和启动虚拟环境
$ virtualenv venv
$ source venv/bin/activate
使用virtualenv命令创建名为venv的虚拟环境。
使用source venv/bin/activate命令激活虚拟环境venv。终端命令提示符前会显示(venv)。
当您希望结束虚拟环境的运行时,可以在终端中执行”deactivate”命令。
安装 Django 工具包
$ pip install django-toolbelt
通过安装 Django-toolbelt 包,将安装以下的软件包。
-
- django (Django本体)
-
- psycopg2 (PythonでpostgreSQLを扱いやすくする)
-
- gunicorn (Pythonで動くWSGIサーバ)
-
- dj-database-url (DjangoでpostgreSQLを扱えるようにする)
- dj-static (静的リソースを扱えるようにする)
创建Django项目
$ django-admin.py startproject myDjango ./
在当前目录下创建一个名为myDjango的Django项目。
修改语言和时区
将位于myDjango目录中的settings.py文件下面的部分进行更改。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
进行移民
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
如果变成这样就可以了
迁移简单来说,就是在不写SQL的情况下,可以使用Python在数据库中创建表的功能。
参考资料:初学Rails的人容易出错的“迁移”
服务器启动
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
July 16, 2017 - 02:53:26
Django version 1.11.3, using settings 'myDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
执行python manage.py runserver命令,如果出现上述显示结果,那就可以了。
通过执行此命令,可以在http://127.0.0.1:8000/上查看应用程序。
要退出时,请按Ctrl+C。
使用Git进行版本管理
创建.gitignore文件,并写入以下内容。
*.pyc
venv
staticfiles
db.sqlite3
提交
$ git init
$ git add .
$ git commit -m "Djangoアプリを作成した"
将应用部署到Heroku上
创建Procfile
$ echo "web: gunicorn myDjango.wsgi --log-file -" > Procfile
Procfile是一个文件,用来告诉Heroku要运行什么程序。
参考:Procfile在Heroku中的作用。
创建 runtime.txt
$ echo "python-3.6.1" > runtime.txt
使用 runtime.txt 文件指定 Python 的版本。
创建requirements.txt
$ pip freeze > requirements.txt
可以生成这种类型的文件
dj-database-url==0.4.2
dj-static==0.0.6
Django==1.11.3
django-toolbelt==0.0.1
gunicorn==19.7.1
psycopg2==2.7.1
pytz==2017.2
static3==0.7.0
在Heroku上启用Django应用,在settings.py的最后一行添加以下内容。
# Parse database configuration from $DATABASE_URL
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Allow all host headers
ALLOWED_HOSTS = ['*']
# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
修改 wsgi.py 文件
import os
from dj_static import Cling
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myDjango.settings")
application = Cling(get_wsgi_application())
创建Heroku应用程序
$ heroku create
在Heroku上设置环境变量。
$ heroku config:set DISABLE_COLLECTSTATIC=1
如果不这样做,在推送时会出错。
将代码推送到Heroku
$ git add .
$ git commit -m "Herokuで動くようにした"
$ git push heroku master
远程:验证部署…完成。推送成功。
在Heroku上进行迁移也是可以的。
$ heroku run python manage.py migrate
在Heroku上运行〇〇后,可以执行〇〇命令。
确认是否在Heroku平台上运行
$ heroku open
总结
这次我在Heroku上将刚刚创建的Django应用成功运行了起来。
下次将进行管理网站和模型创建的工作。
下次将Django应用部署到Heroku[第2部分]。
请提供以下的汉语原文,我将为您进行适当的释义。
-
- たった5分でDjangoアプリをherokuにデプロイする方法
- Deploying Python and Django Apps on Heroku