django - 在Heroku上安装和部署Django应用

标签 django git postgresql heroku

我经常忘记步骤,希望有一个关于在heroku上部署django项目的快速指导。
如何在heroku上安装和部署django应用程序?
我已经发布了一个逐步的步骤,为我的工作步骤的答案。
你将得到:
在Heroku和你的电脑上都有Django应用程序。
两台机器上的Postgres数据库
Git/比特桶
认证:登录、注销、注册、忘记通行证、仅电子邮件认证(可选和默认)
在两台机器上工作的静态文件
包括引导程序3.0.3
南迁(instructions
要求
Heroku帐户
GitHub/BitBucket帐户
带OSX的Mac(10.9测试)

最佳答案

更新:
要快速安装,请查看另一个答案。
文件夹结构
project_wrapper-它将保存所有内容,包括ps
Django_项目-它将保存代码
django_应用程序-主应用程序将使用该名称
无论你在哪里看到这些,用你的真名代替!!!
虚拟环境
如果你没有virtualenv,你需要得到它。它将允许您为每个项目单独安装软件:

pip install virtualenv

然后我们创建我们的项目:
cd ~
mkdir PROJECT_WRAPPER && cd PROJECT_WRAPPER
virtualenv venv

现在您有了一个专用文件夹,其中将包含独立安装和python、django等的版本。
我们按照以下方式激活并开始处理项目:
source venv/bin/activate

Postrges应用程序
在继续之前,我们将安装postgres.app。从以下位置获取:
http://postgresapp.com/
安装。
我们现在将把我们的环境和它联系起来:
PATH=/Applications/Postgres.app/Contents/MacOS/bin/:$PATH

需求.txt
现在我们需要安装以下组件:
python,django-不需要解释
south-数据库迁移(django的开发版本不需要它)
Django工具带-Heroku所需,包括Heroku所需的一切
psycopg-postgres数据库
simplejson,mixpanel-这些是可选的,如果你不喜欢的话可以跳过
因此,要创建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项目
让我们从这一行开始,不要忘记最后的点:
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

本地heroku
你可以模拟Heroku和Foreman在你的电脑上工作。让我们创建最简单的配置文件:
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())

静态文件
理想情况下,您可以从amazon或类似的地方服务器静态文件。但对于简单的网站,你可以使用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

在最后一个文件夹中,您将放置所需的所有图像。
URL设置和视图
在url.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_项目文件夹:
cd ~/PROJECT_WRAPPER/DJANGO_APP/
rm views.py
clone https://raw2.github.com/mgpepe/django-heroku-15/master/DjMainApp/views.py -o views.py

用真实的django_应用程序名替换整个DjMainApp
克隆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帐户和密钥
即使你不需要有多个Heroku帐户,这是一个简单的方法来设置和使用它,即使是一个帐户。所以我们走吧:
cd ~
heroku plugins:install git://github.com/ddollar/heroku-accounts.git

添加Heroku帐户:
views.py
输入您的Heroku凭据。
电子邮件:您的电子邮件
密码:你的英雄密码
它在控制台上说,你必须这样做:
在~/.ssh/config中添加以下内容
Host heroku.personal
  HostName heroku.com
  IdentityFile /PATH/TO/PRIVATE/KEY
  IdentitiesOnly yes

使用以下内容转到项目文件夹:
cd ~/PROJECT_WRAPPER

然后将新帐户设置为:
heroku accounts:set personal

要创建新的ssh密钥:
ssh-keygen -t rsa

当要求输入名称时,如图所示写出完整的路径和名称。然后键入密码或留空
然后将密钥添加到OSX和Heroku:
heroku keys:add  ~/.ssh/YOUR_KEY_NAME.pub
ssh-add ~/.ssh/YOUR_KEY_NAME

部署heroku文件
既然你有钥匙了,你应该可以
Heroku应用程序
并确保没有应用程序。要添加第一个应用程序:
heroku apps:create YOUR_APP_NAME

现在上传到服务器:
git push heroku master

现在进入你的应用程序www.herokuapp.com查看你的网站!
域设置
如果有人想的话还有待解释,告诉我
笔记
深入文档:
https://docs.djangoproject.com/en/1.6/intro/tutorial01/
https://devcenter.heroku.com/articles/getting-started-with-django

关于django - 在Heroku上安装和部署Django应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383328/

相关文章:

python - 如何以前瞻性方式扩展 Django View /模板

python - 使用许多同时请求(如 ab)对 Django 应用程序进行基准测试

Django-TinyMCE : How to configure it properly?

django - 在 Google App Engine 上实现标签

git - 如何在不同的git仓库之间复制带有历史记录的文件?

sql - PostgreSQL 基于范围的连接工作太慢

Git\Gerrit 远程被 "missing Change-Id in commit message footer"拒绝

git - 我怎样才能切换到git中的另一个分支?

ruby-on-rails - 可以在 `table_name_prefix` 中指定架构吗?

sql - 根据同一表中的两行检索一行