2017-03-03 1 views
0

Je construis une application web de base avec Flask. Entrez un mot-clé et votre adresse e-mail, cliquez sur Soumettre, et un employé Céleri (configuré pour utiliser Redis) récupère des images de Flickr, les télécharge, les zippe et envoie le fichier zip en pièce jointe à l'e-mail fourni.Pourquoi mon application Flask est-elle déployée sur Heroku échouant sur sqlite3.OperationalError lorsque mon application n'utilise même pas une base de données?

Je n'ai pas configuré mon application pour utiliser une base de données, je me suis dit que je n'en avais pas besoin. Lorsque je tente de déployer mon application à Heroku, cependant, je reçois les éléments suivants de mes journaux d'erreur:

2017-03-03T18:33:49.500689+00:00 app[web.1]: Traceback (most recent call last): 
2017-03-03T18:33:49.500691+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker 
2017-03-03T18:33:49.500692+00:00 app[web.1]:  worker.init_process() 
2017-03-03T18:33:49.500692+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process 
2017-03-03T18:33:49.500693+00:00 app[web.1]:  self.load_wsgi() 
2017-03-03T18:33:49.500694+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi 
2017-03-03T18:33:49.500694+00:00 app[web.1]:  self.wsgi = self.app.wsgi() 
2017-03-03T18:33:49.500695+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi 
2017-03-03T18:33:49.500696+00:00 app[web.1]:  self.callable = self.load() 
2017-03-03T18:33:49.500697+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 
2017-03-03T18:33:49.500697+00:00 app[web.1]:  return self.load_wsgiapp() 
2017-03-03T18:33:49.500698+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
2017-03-03T18:33:49.500699+00:00 app[web.1]:  return util.import_app(self.app_uri) 
2017-03-03T18:33:49.500699+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 357, in import_app 
2017-03-03T18:33:49.500700+00:00 app[web.1]:  __import__(module) 
2017-03-03T18:33:49.500700+00:00 app[web.1]: File "/app/app.py", line 31, in <module> 
2017-03-03T18:33:49.500701+00:00 app[web.1]:  flickr = flickrapi.FlickrAPI(flickr_key, flickr_secret, format='parsed-json') 
2017-03-03T18:33:49.500702+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flickrapi/core.py", line 209, in __init__ 
2017-03-03T18:33:49.500702+00:00 app[web.1]:  self.flickr_oauth = auth.OAuthFlickrInterface(api_key, secret, self.token_cache) 
2017-03-03T18:33:49.500703+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flickrapi/auth.py", line 166, in __init__ 
2017-03-03T18:33:49.500704+00:00 app[web.1]:  if oauth_token.token: 
2017-03-03T18:33:49.500704+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flickrapi/tokencache.py", line 180, in token 
2017-03-03T18:33:49.500705+00:00 app[web.1]:  (self.api_key, self.lookup_key)) 
2017-03-03T18:33:49.500709+00:00 app[web.1]: sqlite3.OperationalError: no such table: oauth_tokens 

sont des applications Flask doivent avoir une base de données configurée avant de pouvoir être déployés pour Heroku? Cela semble ridicule.

Il semble que ce soit un problème avec FlickrAPI. L'erreur semble être levée quand FlickrAPI utilise mon api_key et son secret pour m'authentifier, mais il n'a jamais jeté cette erreur quand je testais en local, et je ne comprends pas pourquoi l'accès à l'API nécessiterait une base de données pour suivre un tokencache et oauth_tokens de toute façon. Dois-je utiliser un autre module FlickrAPI? Ai-je besoin d'utiliser une base de données dans mon application? Je suis nouveau sur Python et Flask, donc il me manque probablement quelque chose de basique.

Toute aide serait grandement appréciée!

Mon requirements.txt:

Flask==0.10.1 
Flask-Mail==0.9.1 
Jinja2==2.7.3 
MarkupSafe==0.23 
Werkzeug==0.9.6 
amqp==1.4.6 
anyjson==0.3.3 
argparse==1.2.1 
billiard==3.3.0.19 
blinker==1.3 
celery==3.1.17 
click==6.7 
flickrapi==2.2.1 
gunicorn==19.6.0 
itsdangerous==0.24 
kombu==3.0.30 
oauthlib==2.0.1 
pytz==2014.10 
ratelimit==1.2.0 
redis==2.10.3 
requests==2.13.0 
requests-oauthlib==0.8.0 
requests-toolbelt==0.7.1 
six==1.10.0 
vine==1.1.3 

Répondre

0

Le paquet flickrapi utilise SQLite pour son OAuthTokenCache (voir code here). Et il semble que SQLite n'est pas supporté par Heroku (le système de fichiers est éphémère dans Heroku): https://devcenter.heroku.com/articles/sqlite3

Donc vous pourriez vouloir regarder alternatives in PyPi.

+0

Merci beaucoup! Donc je peux soit 1) jouer avec cette liste d'alternatives jusqu'à ce que j'en trouve une que j'utilise qui n'utilise pas sqlite3, ou 2) Je peux utiliser une solution de déploiement qui supporte sqlite3. Je vais jouer au n ° 1 maintenant, mais y a-t-il d'autres solutions de déploiement que vous recommanderiez si, pour une raison ou une autre, je voulais continuer à utiliser le module flickrapi que j'utilise? –