我经常忘记步骤,并希望有关于在Heroku上部署django项目的快速教学指南。
如何在Heroku上安装和部署Django应用程序?
我已经逐步找到了对我有用的步骤的答案。
答案 0 :(得分:4)
要快速安装,请查看其他答案。
你看到的那些地方,用你的真名取代!!!
如果您没有virtualenv
,则需要获取它。它允许您为每个项目单独安装软件:
pip install virtualenv
然后我们创建我们的项目:
cd ~
mkdir PROJECT_WRAPPER && cd PROJECT_WRAPPER
virtualenv venv
现在您有一个专用文件夹,其中包含独立安装和python,django等版本。
我们激活并以下列方式开始处理项目:
source venv/bin/activate
在我们继续之前,我们将安装postgres.app。抓住它: http://postgresapp.com/
安装。
我们现在将用它来连接我们的环境:
PATH=/Applications/Postgres.app/Contents/MacOS/bin/:$PATH
现在我们需要安装以下内容:
因此,要创建requirements.txt文件,我们将从我的git存储库中准备好它:
clone https://raw2.github.com/mgpepe/django-heroku-15/master/requirements.txt -o requirements.txt
现在有了一个命令,我们将安装来自requirements.txt的所有内容:
pip install -r requirements.txt
很好,现在我们可以验证我们有django:
python -c "import django; print(django.get_version())"
让我们用这一行开始项目,不要忘记最后的点:
django-admin.py startproject DJANGO_PROJECT .
现在,如果您输入ls
,您应该会看到一个包含您的项目名称的文件夹,其中包含您的Django项目。
要查看是否一切正常运行:
python manage.py runserver
运行Postgres应用。
使用(我使用我的osx用户名)创建数据库:
createdb YOUR_DATABASE_NAME --owner=YOUR_OSX_USERNAME
将DATABASES
更改为如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'YOUR_DATABASE_NAME',
'USER': 'YOUR_OSX_USERNAME',
'PASSWORD': 'YOUR_DATABASE_PASSWORD', #might be empty string ''
'HOST': '127.0.0.1',
# 'PORT': '5432',
}
}
还让我们联系南方的迁移。您的INSTALLED_APPS
应该是这样的:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
)
将SECRET_KEY
变量更改为其他变量。
现在如果一切正常,你应该能够用:
创建第一个表python manage.py syncdb
现在在项目中制作第一个应用
python manage.py startapp DJANGO_APP
文件中的:~/PROJECT_WRAPPER/DJANGO_PROJECT/settings.py
将DJANGO_APP
应用添加到变量INSTALLED_APPS
的列表中。应该是这样的:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'DJANGO_APP',
)
添加以下行:
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
为了使模板组织良好和有效,我们将base.html复制到一个文件夹中,其余模板复制到应用程序中:
cd ~/PROJECT_WRAPPER/
mkdir templates
curl https://raw2.github.com/mgpepe/django-heroku-15/master/templates/base.html -o base.html
现在剩下的模板:
cd ~/PROJECT_WRAPPER/DJANGO_APP/
mkdir templates && cd templates
mkdir DJANGO_APP
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/changepass.html -o changepass.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/forgot_pass.html -o forgot_pass.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/home.html -o home.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/login.html -o login.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/logout.html -o logout.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/registration.html -o registration.html
curl https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/templates/DjMainApp/splash.html -o splash.html
由于最近使用电子邮件而不是用户名是时髦的,我们也会这样做。
*注意:如果您决定不使用它,则可以跳过此步骤但是您必须编辑视图和模板以使用用户名而不是电子邮件。 *
在设置中添加以下行:
AUTHENTICATION_BACKENDS = (DJANGO_PROJECT.backends.EmailAuthBackend’,)
然后将文件backends.py复制到我们的项目目录中:
cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/backends.py -o backends.py
您可以使用Foreman模拟在计算机上运行的heroku。让我们创建最简单的配置文件:
cd ~/PROJECT_WRAPPER
echo "web: gunicorn DJANGO_PROJECT.wsgi" > Procfile
foreman start
现在您看到它正常运行,请使用CTRL+C
在底部的设置中添加:
# HEROKU
###########################
# Parse database configuration from $DATABASE_URL
if os.environ.has_key('DATABASE_URL'):
import dj_database_url
DATABASES['default'] = dj_database_url.config()
# 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 = ['*']
在您的DJANGO_PROJECT/wsgi.py
文件中,将以下内容添加到底部:
from dj_static import Cling
application = Cling(get_wsgi_application())
理想情况下,您可以从亚马逊等服务器静态文件。但对于简单的网站,您可以使用Django。设置它需要您将其附加到设置文件中:
# HEROKU STATIC ASSETS 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'),
)
并将所有静态文件放在特定文件夹中。首先使用以下内容转到项目文件夹:
cd ~/PROJECT_WRAPPER/DJANGO_PROJECT/
现在你可以复制/粘贴其余部分:
mkdir static && cd static
mkdir css && cd css
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/css/bootstrap.min.css -o bootstrap.min.css
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/css/styles.css -o styles.css
cd ..
mkdir js && cd js
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjangoHerokuIn15/static/js/bootstrap.min.js -o bootstrap.min.js
cd ..
mkdir img && cd img
在最后一个文件夹中,您将放置所需的所有图像。
在urls.py中,在'example'之前复制这些行:
url(r'^$', "pmfmain.views.splash", name="splash"),
url(r'^login$', "pmfmain.views.login_view", name="login"),
url(r'^signup$', "pmfmain.views.register", name="signup"),
url(r'^forgot$', "pmfmain.views.forgot_pass", name="forgotmypass"),
url(r'^logout$', "pmfmain.views.logout_user", name="logout"),
url(r'^dashboard$', "pmfmain.views.home", name="home”),
然后将views.py从我的github repo复制到你的DJANGO_PROJECT文件夹:
cd ~/PROJECT_WRAPPER/DJANGO_APP/
rm views.py
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/views.py -o views.py
做一个发现&在整个DjMainApp
views.py
克隆https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/forms.py -o forms.py
有些文件不需要在git中,所以让我们为此设置配置:
echo -e "venv\n*.pyc\n*.log\n*.pot\nstaticfiles" > .gitignore
现在让我们提交:
git init
git add .
git commit -m ‘initial commit of django app’
在git中创建一个存储库,然后复制git url(以.git结尾的那个)。然后:
git remote add origin THE_URL
git pull origin master
如果您不想为github付费并且您希望将您的存储库设为私有,则可以使用bitbucket。
登录您的帐户 创建一个新的存储库 单击“添加现有项目”
git remote add origin https://USERNAME@bitbucket.org/USERNAME/REPOSITORY_NAME.git
即使您不必拥有多个heroku帐户,也可以轻松地设置和使用它,即使是一个帐户也是如此。所以我们走了:
cd ~
heroku plugins:install git://github.com/ddollar/heroku-accounts.git
添加一个heroku帐户:
heroku accounts:add personal
它在控制台中说明了,你必须这样做:
将以下内容添加到〜/ .ssh / config
Host heroku.personal
HostName heroku.com
IdentityFile /PATH/TO/PRIVATE/KEY
IdentitiesOnly yes
使用以下内容转到项目文件夹:
cd ~/PROJECT_WRAPPER
然后将新帐户设置为:
heroku accounts:set personal
创建新的ssh KEY:
ssh-keygen -t rsa
当询问姓名时,请填写完整路径和名称,如图所示。然后输入密码或留空
然后将密钥添加到您的OSX和heroku:
heroku keys:add ~/.ssh/YOUR_KEY_NAME.pub
ssh-add ~/.ssh/YOUR_KEY_NAME
现在您已经按顺序拥有了密钥,您应该能够做到 heroku应用程序
并看到没有应用。要添加您的第一个应用:
heroku apps:create YOUR_APP_NAME
现在要上传到服务器:
git push heroku master
现在转到YOUR_APP_NAME.herokuapp.com查看您的网站!
还有待解释,请告诉我
深入的文档:
答案 1 :(得分:1)
在我的另一个答案中,这个过程描述得很好,但需要时间。所以我做了一个准备好的安装,不到15分钟就可以了。
https://github.com/mgpepe/django-heroku-15
如果您更喜欢长路径的完整说明,请参阅下面的答案。
答案 2 :(得分:1)
- Dyno应该在heroku-> resources中添加/看到,并且如果没有在Heroku的资源中添加它,则意味着存在问题。 procfile
web: gunicorn django_project.wsgi --log-file -
- 记住要在settings.py文件中进行更改
DEBUG=True
ALLOWED_HOSTS = ["your-app.herokuapp.com","127.0.0.1"]
将此文件添加到
settings.py
文件中#->这应该在中间件中
'whitenoise.middleware.WhiteNoiseMiddleware',
#->this at the bottom
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
- 将其放置在
settings.py
文件的顶部:
导入django_heroku
place this at the bottom of "settings.py" file:
django_heroku.settings(locals())
- Heroku仅适用于postgres,记住这一点:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "poll_app",
"USER": "postgres",
"PASSWORD": "1234",
"HOST": "127.0.0.1",
"PORT": "5432",
}
}
在pgadmin中创建数据库,如果未运行,请在services.msc中启动“ postgres”。在我的情况下,它是“ poll_app”,然后运行命令
python manage.py migrate
在heroku中转到“您的应用”并转到“设置”,然后在设置中选择“添加buildpack”,然后选择“ python”
“在您的目录中运行此命令”
heroku run bash
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
- 通过删除工作目录的git文件重新开始,删除heroku项目(设置->底部)