How do I run my Flask app remotely using MongoHQ and Heroku (Python)

334 Views Asked by At

I have a script written in Python that lets me consume tweets from Terminal into a locally hosted mongodb database. To improve uptime, I would like to host this script remotely on Heroku and to shoot the consumed tweets into a database hosted with MongoHQ. As I would like to do this without using Django, I use the Flask framework to deploy the app to Heroku (described here: https://devcenter.heroku.com/articles/python).

When I run a simple "hello world" app using this setup, everything is fine. However, when I try to run my tweet consuming app, it immediately crashes. How can I change my app to that it will work with the Flask/Heroku/MongoHQ setup? The source code is:

import json
import pymongo
import tweepy

consumer_key = ""
consumer_secret = ""
access_key = ""
access_secret = ""

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)


class CustomStreamListener(tweepy.StreamListener):
    def __init__(self, api):
        self.api = api
        super(tweepy.StreamListener, self).__init__()

        self.db = pymongo.MongoClient().test

    def on_data(self, tweet):
        self.db.tweets.insert(json.loads(tweet))

    def on_error(self, status_code):
        return True # Don't kill the stream

    def on_timeout(self):
        return True # Don't kill the stream


sapi = tweepy.streaming.Stream(auth, CustomStreamListener(api))
sapi.filter(track=['rooney'])

I am completely new to programming so I imagine the solution to this problem might well be quite straight forward. However, I am stuck and could really use some help to progress.

1

There are 1 best solutions below

1
On

It's hard to debug without more information, but my first guess is that you don't have the dependancies installed.

Heroku gives you a clean python environment. However, you need special libraries like tweepy that don't get installed by default. Thus, you have to let Heroku know to install these.

You'll need to use pip and a requirements.txt document which lists out all the libraries that you are trying to use as well as what version numbers.

https://devcenter.heroku.com/articles/python-pip