我已经制作了一个在我的服务器上运行的django应用程序。我现在想要使用heroku在网上启动它,但是我找到的所有教程都会让你开始一个全新的项目。我不知道如何更新我已经存在的django项目以使用heroku。
现在我的文件组织如下:
in hcp:
crunchWeb:
crunchWeb: files = _init_.py ; settings.py ; urls.py ; wsgi.py
crunchApp: files = _init_.py ; admin.py ; models.py ; views.py etc...
manage.py
sqlite3.db
env: folders= bin ; helloflask ; include ; lib #all of these were created automatically
templates: all my .html files
我想知道heroku教程(https://devcenter.heroku.com/articles/django#using-a-different-wsgi-server)中的哪些命令我还需要做什么以及我可以跳过哪些命令
我还想知道在执行所有命令时我需要在哪个文件夹中
谢谢!
2012-09-06T21:44:52+00:00 app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/__init__.py", line 34, in __getattr__
2012-09-06T21:44:52+00:00 app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/utils.py", line 92, in __getitem__
2012-09-06T21:44:52+00:00 app[web.1]: return getattr(connections[DEFAULT_DB_ALIAS], item)
2012-09-06T21:44:52+00:00 app[web.1]: backend = load_backend(db['ENGINE'])
2012-09-06T21:44:52+00:00 app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/utils.py", line 24, in load_backend
2012-09-06T21:44:52+00:00 app[web.1]: return import_module('.base', backend_name)
2012-09-06T21:44:52+00:00 app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
2012-09-06T21:44:52+00:00 app[web.1]: __import__(name)
2012-09-06T21:44:52+00:00 app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 31, in <module>
2012-09-06T21:44:52+00:00 app[web.1]: raise ImproperlyConfigured("Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s" % exc)
2012-09-06T21:44:52+00:00 app[web.1]: django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3
2012-09-06T21:44:54+00:00 heroku[web.1]: Process exited with status 1
2012-09-06T21:44:54+00:00 heroku[web.1]: State changed from starting to crashed
2012-09-06T21:44:54+00:00 heroku[web.1]: State changed from crashed to starting
2012-09-06T21:44:58+00:00 heroku[web.1]: Starting process with command `python ./manage.py runserver 0.0.0.0:57395 --noreload`
2012-09-06T21:44:59+00:00 app[web.1]: File "./manage.py", line 10, in <module>
settings.py
# Django settings for crunchWeb project.
import dj_database_url
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
# {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
# 'NAME': '/Users/Santi/hcp/crunchWeb/sqlite3.db', # Or path to database file if using sqlite3.
# 'USER': '', # Not used with sqlite3.
# 'PASSWORD': '', # Not used with sqlite3.
# 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
# 'PORT': '', # Set to empty string for default. Not used with sqlite3.
# }
# }
答案 0 :(得分:3)
直接从方向https://devcenter.heroku.com/articles/django,如果您阅读指示并按照指示再次执行,则会再次执行:
$pip install Django psycopg2 dj-database-url
接下来,将应用程序配置为使用Heroku的Postgres数据库。已安装的dj-database-url模块将自动从环境中执行所有操作。
将以下内容添加到settings.py:
import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
您可以在settings.py的末尾添加这些行,以继续在本地使用sql lite,并且只在heroku上使用postgres。
settings.py
------------------------
import dj_database_url
import os
if os.getcwd() == "/app":
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
答案 1 :(得分:0)
您链接的heroku/django deployment tutorial仍然是您最好的选择。我刚刚通过该教程部署了现有的应用程序,并跳过了我已经完成的步骤,例如:
virtualenv venv --distribute
django-admin.py startapp...
manage.py syncdb...
git init
基本上,如果您已经为现有的应用程序干了!
我在上面的文件夹结构中没有看到requirements.txt,所以请确保
pip freeze > requirements.txt
为了减少破坏我现有代码的可能性,我做了以下
# create a branch for testing heroku
git checkout -b heroku_test
#... follow the heroku tutorial
# add my changes
git add .
git commit -m "Heroku deployment steps"
# add the heroku remote
git remote add heroku [address]
git push heroku heroku_test:master
推送语句heroku_test:master
的最后一部分允许您将本地分支heroku_test
推送到远程分支master
。 (否则heroku将忽略提交,因为它不在主分支上)。