今回はDjangoのソースコードにあまり触れず、状況だけ簡単に説明しようと思います。
虫のいい話ですが、知識のある方に助けていただきたくて投稿していますので対処法が分かる方はどうかお助けください。
これの続きでページにログイン機能を付けようとしていたらハマった。
まずはローカル環境で作業。データベースは”sqlite3”を使用している。
詳しい説明は省くが、とりあえず編集・削除は投稿者でないとできないようにしたかったので、Entryモデルに投稿したユーザーのデータを追加して参照できるようにした。
models.py
from django.contrib.auth.models import User
class Entry(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
create_datetime = models.DateTimeField(auto_now_add=True)
update_datetime = models.DateTimeField(auto_now=True)
owner = models.ForeignKey(User) #ここ
その後python manage.py syncdb
を実行してデータベースを更新。うまくいったように見えたのだが、いざrunserver
でローカル環境のテストページにアクセスするとエラーだった。
no such column: owner_id
うろ覚えだがたしかこんな感じ。
以下のページを参考に’drop table’してから再度’syncdb’したところ解決。
http://stackoverflow.com/questions/7218590/caught-databaseerror-while-rendering-no-such-column-bookmarks-bookmark-title
で、他には特に問題なくプログラムも動いていたので、herokuにpush。
heroku run python manage.py syncdb
でデータベースも更新。こちらはPostgreSQL。
で、アクセスしてみるとエラー。エラーメッセージをメモし忘れていたが、たしかローカル環境で起こったのと似ていたか、あるいは同じだったような気がする。
だから対処法もだいたい同じだろうと思い、heroku run postgresql
を実行。
bash: postgresql: command not found
・・・・アクセスの仕方が分からなかったので、「GUIから消せばいいや」とherokuのアプリケーションページへ。
”Add-ons"の右端にある「×」マークで消した。
その後、同じページの"Get Add-ons"からアプリケーションに向けてPostgreSQLを改めてAdd。
heroku run python manage.py syncdb
を実行すると、
Running
python manage.py syncdb
attached to terminal... up, run.1453
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
うまくいったかと思いきや、ページにアクセスすると正体不明のエラーになった。
OperationalError at /
FATAL: role "ognimhmmzwucqv" is not permitted to log in
現場:http://thawing-shelf-8495.herokuapp.com/
そこで、現状のモデル設定がどんな内容なのかを確認するため、heroku run python manage.py sql [appname]
を実行。
すると、いかにも「失敗しました」という感じでログがずらっと出てくる。
一番下にエラーメッセージを発見。
django.db.utils.OperationalError: FATAL: role "ognimhmmzwucqv" is not permitted to log in
"ognimhmmzwucqv”という文字列は不可解さ加減からするとIDか何かだと思われるのだが、データベースのIDだろうか?新しいデータベースのアクセス権減がないと言われてる気がする。
というか、たった今ふと間違いに気付いた。
テーブルでなくてデータベースそのものを消してるじゃないか。
かなりの確率でそれが今回の要因・・・・・どなたかアドバイスをお願いします。