将Django部署到Heroku(备忘录)
准备好
需要进行安装等操作的东西
Python3.6.5
django-toolbelt0.0.1
Django2.1.3
gunicorn19.9.0
git2.14.3
在2019年03月06日确认过,这是我的环境。
创建环境
建立开发环境
mkdir directoryname #作業ディレクトリ
cd directoryname
django-admin startproject projectname #プロジェクトディレクトリが作業ディレクトリ内に作られる。
建立应用开发环境
cd projectname
python3 manage.py startapp appname #アプリディレクトがプロジェクトディレクトリ内に作られる。
创建一个能显示HTML的应用程序。
编辑等等
修改 projectname/projectname/setting.py 文件。
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'appname', #追記
)
〜〜〜〜〜
LANGUAGE_CODE = 'ja' #変更
TIME_ZONE = 'Asia/Tokyo' #変更
USE_I18N = True
USE_L10N = True
USE_TZ = False #変更
编辑projectname/projectname/urls.py文件。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path(r'admin/', admin.site.urls),
path('', include('appname.urls')),
]
在projectname/appname的根目录下,创建一个urls.py文件和一个templates目录,然后在templates目录中创建index.html文件。
touch urls.py
mkdir templates
touch index.html
编辑projectname/appname/urls.py。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
编辑项目名/应用名/views.py文件。
from django.shortcuts import render
# Create your views here.
def index(request): #追記
return render(request, "index.html")
index.html文件的内容如下所示。
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
Hello, Heroku!!
</body>
</html>
执行以下命令,如果在浏览器上显示“Hello, Heroku!!”就说明Django已经完成了。
python3 manage.py runserver
将代码部署到Heroku平台上
准备
创建Procfile。
echo "web: gunicorn projectname.wsgi --log-file -" > Procfile
创建一个 runtime.txt 文件。
echo "python-3.6.5" > runtime.txt
创建 requirements.txt 文件。
这个也可以,但是,
pip freeze > requirements.txt
由于在全球环境下开发,导致git push时出现了许多不必要的错误。只输入了必要的内容。
dj-database-url==0.4.2
dj-static==0.0.6
django-toolbelt==0.0.1
Django==2.1.3
gunicorn==19.9.0
编辑Django应用
修改setting.py文件。
#BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 変更前
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) #変更後
#ALLOWED_HOSTS = [] 変更前
ALLOWED_HOSTS = ['*'] #変更後
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = "staticfiles" #追記
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) #追記
### 以下追記 ###
# 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')
将wsgi.py更改为以下内容。
import os
from dj_static import Cling
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")
application = Cling(get_wsgi_application())
放置!
创建一个Heroku应用
登录Heroku,创建Heroku应用。
特别说明,使用”heroku create herokuAppName”命令时,
“herokuAppName”将成为Heroku应用的名称。
使用”heroku create”命令时,将自动分配一个应用名称。
heroku login #この時ブラウザでログインが求められるかも
heroku create
似乎需要进行Heroku环境变量的设置。
heroku config:set DISABLE_COLLECTSTATIC=1
将git与其他系统进行集成
将git与其进行整合。
git init
heroku git:remote -a herokuでのアプリ名
向Git推送!推送!推送!
git add .
git commit -am "なんかコメント"
git push heroku master
当收到「远程:验证部署…完成。」的提示时,表示成功。我会进行确认。
heroku open
如果发生失败的情况,就一直使用”heroku logs –tail”命令进行调查。