0

The problem:

I'm having trouble getting my SQLite database to work on Heroku. When I try to go to the app's URL in my browser, I get an internal server error. heroku logs shows this:

OperationalError: (sqlite3.OperationalError) no such table: questions [SQL: u'SELECT questions.id AS questions_id, questions.title AS questions_title, questions.content AS questions_content \nFROM questions']

What I've tried:

I can reproduce this error locally by deleting my local database (there's nothing important in it yet):

$ rm data-dev.sqlite
$ heroku local
# Go to localhost:5000 in my browser, 500 Internal server error
OperationalError: (sqlite3.OperationalError) no such table: questions [SQL: u'SELECT questions.id AS questions_id, questions.title AS questions_title, questions.content AS questions_content \nFROM questions']

I can fix it locally by using Flask-Migrate's upgrade command:

$ python2 manage.py db upgrade
$ heroku local
# Go to localhost:5000, get a working website

However, when I try to fix it on Heroku by doing the same thing, it doesn't work:

$ heroku run ls
# Doesn't show any .sqlite database files
$ heroku run python manage.py db upgrade
# Go to the website URL, get 500 Internal server error
$ heroku logs
OperationalError: (sqlite3.OperationalError) no such table: questions [SQL: u'SELECT questions.id AS questions_id, questions.title AS questions_title, questions.content AS questions_content \nFROM questions']

I've also tried manually dropping and creating the tables:

$ heroku run python manage.py shell
>>> db.drop_all()
>>> db.create_all()
>>> quit()
# Go to website URL, get 500 Internal server error
$ heroku logs
OperationalError: (sqlite3.OperationalError) no such table: questions [SQL: u'SELECT questions.id AS questions_id, questions.title AS questions_title, questions.content AS questions_content \nFROM questions']

I'm pretty stumped at what to do. It looks like Flask-Migrate doesn't create the database file for some reason. I tried open('textfile.txt', 'w') in manage.py, and it successfully created the file.

2
  • You can't use sqlite on Heroku. You need to use a db add-on. Commented Mar 25, 2016 at 17:31
  • Such a simple answer. I wish I had know that sooner. Thanks! Commented Mar 25, 2016 at 17:32

1 Answer 1

2

You can't use sqlite on Heroku. That's because it stores the db as a file, but the filesystem is ephemeral and not shared between dynos. heroku run spins up a new dyno which only lasts for the duration of the command. So it creates the db locally, and then immediately destroys everything including the new db.

You need to use the Postgresql add-on.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.