Heroku部署笔记①(Django:Windows)
2021年,日本在社会动荡的浪潮中,以鲁莽的勇气重生为史莱姆一瞬间…不说开玩笑了,我决定在KiKaGaku先生的指导下使用django和Heroku,同时也考虑到以下背景,希望能找到最新的信息和做法。现在先完成了第一步,希望能够发布和共享这些信息。如果能对大家有所帮助,那是我最大的幸福。
环境:Windows11
Python版本:3.10.0
Git版本:2.33.1
Heroku版本:13.5
(Python库在requirements.txt文件中列明)
背景:
由于在https://devcenter.heroku.com/articles/python-support上,Python的运行版本是3.10,所以我想尝试一下是否可行。另外,似乎Windows 11的电脑更快一些(;^_^A)。
请安装Visual Studio Code(以下简称vscode)。
请安装Python(最新版本为3.10.0)。
根据需要添加VSCode的扩展功能。
@sensuikan1973推荐了一些扩展功能,请参考。
https://qiita.com/sensuikan1973/items/74cf5383c02dbcd82234
在命令提示符下
>python -m venv djangovenv
执行,并创建djangovenv文件夹。
上述命令中的”djangovenv”部分是可以根据个人设定的部分。在自己创建Web应用时,可以将其更改为任何名称。
6. 启动虚拟环境
当前,虚拟环境未启动。请执行以下命令。
>djangovenv\Scripts\activate
7. Django的安装
由于虚拟环境中没有Django,所以让我们进行安装。由于我们正在使用Python的虚拟环境,所以可以使用pip进行安装。还可以通过添加“==version”来指定版本。
>pip install django==3.2.9 # or
>pip install django
创建一个名为helloworldproject的文件夹。
>django-admin startproject helloworldproject
>cd helloworldproject
【補充】
– 當 Python 程式無法正常運行時
請將 “python” 改為 “python3″,然後執行。
– 在 Windows 操作系統下無法正常運作時
請輸入以下指令: “python3 manage.py runserver 0:8000″。
9.编辑<helloworldproject\settings.py>文件。
(1) 添加”import os”语句
为了控制与操作系统相关的路径传递方式,需要这样做。
(2) 修改BASE_DIR变量
随着第(1)步的修改,需要更改指定的目录。
# Djangoにおいて基本となるフォルダ(manage.py)の場所を示しています。
BASE_DIR = Path(__file__).resolve().parent
⇒BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
(3)主机的编辑
使用通配符“*”来扩大访问范围的指定。
#hostの編集
ALLOWED_HOSTS = []
⇒ALLOWED_HOSTS = ['*']
修改(4)DB路径
随着 (1) 的修改,将更改指定在 TEMPLATES 中的目录。
#DBのPath編集
'NAME': BASE_DIR / 'db.sqlite3',
⇒'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
将语言和时间设置更改为日本设置。
#言語、時間設定変更
LANGUAGE_CODE = 'en-us'
⇒LANGUAGE_CODE = 'ja'
# 時間の設定
TIME_ZONE = 'UTC'
⇒TIME_ZONE = 'Asia/Tokyo'
(6)确认日语转换
在命令提示符中执行以下命令,确认是否转换为日语。
>python3 manage.py runserver
创建和编辑<helloworldproject\helloworldapp>文件夹。
> python manage.py startapp helloworldapp
在< /helloworldproject/settings.py>中进行编辑。
编辑INSTALLED_APPS。
将helloworldapp添加到要使用的应用程序定义中。
#Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
⇒INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'helloworldapp' #追加
]
在<\helloworldproject\urls.py>文件中添加以下内容:
★添加include,并允许指定包含文件名的URL。
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
⇒from django.contrib import admin
from django.urls import path, include # includeを追加
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('helloworldapp.urls')), # 追加
]
from django.urls import path
urlpatterns = [
path('', hellofunction),
]
在< helloworldapp/views.py>文件中进行追加。
导入在首页上显示的库,并定义在那里使用的函数。
from django.shortcuts import render
⇒from django.shortcuts import render # こちらは後で使用します。
from django.http import HttpResponse # 追加
def hellofunction(request):
return HttpResponse('Hello World !')
15. 我们将进行启动确认。
>python manage.py runserver
or
>python manage.py runserver 0:8000
我会启动HTML并确认是否显示”Hello World!”。但是,请注意,显示的地址将是http://127.0.0.1:8000/hello。
我将编辑第16项。
我将进一步修改,以使HTML文件可以被调用。
from django.shortcuts import render
from django.http import HttpResponse
def hellofunction(request):
return HttpResponse('Hello World !')
⇒from django.shortcuts import render
def hellofunction(request):
return render(request, 'helloworldapp/hello.html')
在17中创建名为”helloworldproject/templates/helloworldapp/hello.html”的文件夹和文件。
创建在第16步中指定的HTML文件。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My First Django</title>
</head>
<body>
<p>Hello World !</p>
</body>
</html>
在中文中重編集 18. < helloworldproject/urls.py >。
由於想要在啟動的虛擬環境中直接存取,因此將’hello/’刪除。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('helloworldapp.urls')), # 'hello/' → '' に変更
]
19. 确认环境的规格。
>python manage.py runserver
我們將安裝必要的函式庫。安裝 Heroku 所需的函式庫步驟如下所示。
>pip install gunicorn
另外,以下是要安装的库列表:
– backports.entry-points-selectable
– certifi
– distlib
– django-heroku
– django-toolbelt
– filelock
– gunicorn
– pipenv
– platformdirs
– six
– static3
– virtualenv
– virtualenv-clone
这些库是手动(通过pip)安装或在安装时添加的。这些库信息来源于https://devcenter.heroku.com/ja/articles/getting-started-with-python。虽然是用英语表示的,但可以在https://pypi.org/project/上找到简单的说明。如有需要,请进行确认。
安装git。按照普通PC的安装方式运行exe文件。详细步骤请参考HyunwookPark的文章https://qiita.com/HyunwookPark/items/d399f6959fc922a15ee1。
请从https://devcenter.heroku.com/ja/articles/getting-started-with-python#-2 下载并双击exe文件进行安装,安装完成后,请参考此链接进行帐户注册(https://mebee.info/2020/02/01/post-5039/ )。
23. 获取 requirements.txt 文件。
>pip freeze > requirements.txt
在命令提示符中执行该命令,并创建requirements.txt文件。
创建pipfile。
>pip install -r requirements.txt
在命令提示符中执行该命令,创建一个Pipfile(用于在部署时加载库)。
我将修改 < helloworldproject/settings.py > 文件。我会添加以下内容,以便能够进行导入。
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
⇒# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
import django_heroku #追記
django_heroku.settings(locals()) #追記
将目录更改为可以读取所需文件的位置(.Procfile ,.gitignore)。
$cd helloworldproject
(1) Procfile
请在文件中写入以下内容。
web: gunicorn helloworldproject.wsgi
在Procfile中,按照进程类型:命令的顺序进行记录,上面的示例中,web是进程类型,gunicorn ~是命令。由于本次项目名称为helloworldproject,因此指定为helloworldproject.wsgi。
(2).gitignore
请在文件中写入以下内容。
*.pyc
*~
__pycache__
djangovenv
db.sqlite3
/static
.DS_Store
(3) runtime.txt
请指定所使用的Python版本。请将内容按照以下方式进行填写。
python-3.10.0
29. 在登录Heroku时,忽略不必要的部署内容。
$heroku login
$heroku create アプリケーション名 --buildpack heroku/python
$git init
使用Heroku创建的应用程序和使用VS Code创建的文件夹进行连接。
$heroku git:remote -a アプリケーション名
选择所有部署所需的文件。
$git add .
(4)为了能够推送,将其设为提交状态。
$git commit -m 'first commit'
(5) 进行推送并创建应用程序。
$git push heroku master
话虽长,但以上应该能够无问题地生成输出(真的是多少次失败然后再重建的啊…( = =) トオイメ)。我查了很多地方,有时候也会创建一些不必要的文件,所以我总结了一下。希望能够对大家有所帮助。非常抱歉我的描述能力有限。虽然还有日记本和机器学习应用程序,但还不知道什么时候能完成(;^_^A。我觉得最容易出错的是git和heroku之类的,但是通过这个处理,我成功了。让我们坚持“只要尽力就会有解决办法!”的信念。那么。