2016-06-30 2 views
3

을 기본 데이터베이스로 로컬로 장고 1.9 프로젝트를 만들었습니다. 나는 DownloadedSongs 테이블 models.py에서 정의 Download라는 응용 프로그램이 있습니다 Heroku가 내 로컬 프로젝트를 배포하기 위해,Django on Heroku : 관계가 없습니다.

from __future__ import unicode_literals 
from django.db import models 


class DownloadedSongs(models.Model): 
    song_name = models.CharField(max_length = 255) 
    song_artist = models.CharField(max_length = 255) 

    def __str__(self): 
     return self.song_name + ' - ' + self.song_artist 

이제

models.py를, 나는 맨 아래에 다음 줄을 추가 내 settings.py 파일 :

import dj_database_url 
DATABASES['default'] = dj_database_url.config() 

내 응용 프로그램은 텍스트 필드의 몇 형태를 가지고 있으며, 그 양식을 제출하기에, 데이터는 DownloadedSongs 테이블에 삽입됩니다. 내가 Heroku가 내 프로젝트를 배포하고이 양식을 제출하려 할 때 지금, 나는 다음과 같은 오류가 발생했습니다 :

Exception Type: ProgrammingError at /download/ 
Exception Value: relation "Download_downloadedsongs" does not exist 
LINE 1: INSERT INTO "Download_downloadedsongs" ("song_name", "song_a... 

이 내 requirements.txt 파일과 같은 모습입니다 : 또한

beautifulsoup4==4.4.1 
cssselect==0.9.1 
dj-database-url==0.4.1 
dj-static==0.0.6 
Django==1.9 
django-toolbelt==0.0.1 
gunicorn==19.6.0 
lxml==3.6.0 
psycopg2==2.6.1 
requests==2.10.0 
static3==0.7.0 

, 내가하려고 않았다 다음 명령도 실행하십시오.

heroku run python manage.py makemigrations 
heroku run python manage.py migrate 

그러나 문제는 여전히 지속됩니다. 여기에 뭐가 잘못 됐나? 당신은 내가 생각 Heroku가에 배포 할 때

+0

데이터베이스에 액세스하여 테이블 이름을 볼 수 있습니까? 테이블이 모두 소문자 일 가능성이 있습니까? 또는 syncdb 명령을 실행해야합니까? – Furbeenator

+0

'syndb' 명령은 Django 1.9에서 더 이상 사용되지 않습니다. 그러나 나는 'makemigrations' 명령을 실행했는지 확인했습니다. –

답변

1

As Heroku's dynos don't have a filesystem that persists across deploys, a file-based database like SQLite3 isn't going to be suitable. It's a great DB for development/quick prototypes, though. https://stackoverflow.com/a/31395988/784648

그래서 전체 SQLite 데이터베이스를 닦아 것입니다 배포 사이에, 당신은 전용 데이터베이스로 이동해야합니다. heroku가 postgres 데이터베이스를위한 무료 티어를 가지고 있다는 것을 알고 있습니다.

2

heroku run을 통해 makemigrations를 실행하지 마십시오. 을 로컬로 실행하고을 실행하고 그 결과를 git에 커밋해야합니다. 그런 다음 해당 코드를 배포하고 생성 된 마이 그 레이션을 heroku run python manage.py migrate을 통해 실행할 수 있습니다.

heroku run은 매번 새로운 dyno를 새로운 파일 시스템으로 회전시키기 때문에 첫 번째 명령에서 생성 된 모든 마이그레이션은 두 번째 명령이 실행될 때까지 손실됩니다. 그러나 어떤 경우이든 마이그레이션은 코드의 일부이며 버전 제어가 있어야합니다.

+0

나는 그것을 또한 시험해 보았다. 그러나 문제는 여전히 지속됩니다. –

3

로컬 마이그레이션 폴더와 콘텐츠가 자식 버전 제어하에 있는지 확인하십시오. 추가하지 않으면

, 다음과 같이 & 그들을 밀어 커밋 (당신이 < MyApp를 > 아래 마이그레이션 폴더가 가정, 그리고 자식 원격는 'Heroku가'이라고합니다) :

푸시가
git add <myapp>/migrations/* 
git commit -m "Fix Heroku deployment" 
git push heroku 

기다립니다 때까지 성공하면 로컬 프롬프트가 다시 나타납니다.

그런 다음 heroku에 로그인하면 생성 된 계정이 실행됩니다. & migrate. 하나의 실행 환경에서이를 수행하려면 개별 heroku 명령으로 실행하지 말고 bash 쉘을 실행하고 거기에서 두 명령을 모두 실행하십시오. ('~ $'는 입력하지 마십시오. 이것은 Heroku 프롬프트를 나타냅니다.)

heroku run bash 
~$ ./manage.py makemigrations 
~$ ./manage.py migrate 
~$ exit 
+0

테스트 할 때 겪었던 문제 때문에 마이그레이션을 수행하기 위해 쉘에 로그인해야했습니다. 위의 단계를 수행했지만 대신 "./manage.py"를 사용하여 "python manage.py"를 사용했습니다 (./ 사용 권한 오류가 있음). 감사. – aleksk