Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Sinatra/Redis app - does one Twitter user follow another?
Ruby
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
static
views
.cfignore
.gitignore
Gemfile
README.md
config.ru
manifest.yml.example
sinatwitter.rb

README.md

Who Follows?

A simple Sinatra/Redis app - does one Twitter user follow another?

This is a refactored and improved version of the app built for RailsConf 2011 by Charles Lee.

There is an example deployed at http://twhofollows.cfapps.io

Overview

This example uses:

It demonstrates:

  • setting the location of static content with Sinatra
  • the use of layout templates
  • how a Cloud Foundry manifest can be used for deployment

Limitations:

  • the app queries the Twitter GET followers/ids REST endpoint, which is rate-limited to 15 calls in a 15 minute window, so it cannot be used heavily. This is just a demonstration of some simple API functionality.

Running the app locally

Fork the project.

Then run:

git clone git@github.com:<your_name>/sinatra-cf-twitter.git whofollows
cd whofollows

You will need a local Redis server running. If you need to connect with a password, edit the follow line to add a :password value.

REDIS_CLIENT = Redis.new(:host => 'localhost', :port => 6379)

You will need to create a Twitter app and place the API keys in the environment variables TW_CONSUMER_KEY, TW_CONSUMER_SECRET, TW_ACCESS_TOKEN and TW_ACCESS_TOKEN_SECRET.

Run rackup to start the server, and navigate to http://localhost:9292 to access the application.

To clear the database cache, hit the /cleardb endpoint.

Deployment to Cloud Foundry

First, fork the project. Then run:

git clone git@github.com:<your_name>/sinatra-cf-twitter.git whofollows
cd whofollows
cp manifest.yml.example manifest.yml
vi manifest.yml

Edit the application name in the manifest file to be a unique value (an appname must be a unique name across all applications running on a Cloud Foundry instance); enter a Redis service instance name; enter your Twitter app API keys; then save the file.

bundle install
cf create-service rediscloud 25mb <service-name>
cf push

Visit http://appname.cfapps.io and run some queries.

To see the use of multiple instances, refresh the page (the initial manifest specifies 2 instances). The port displayed at the end of the page will vary.

To modify, run cf scale -i n (where n is the number of instances of the app to create), and then reload the page. Repeat with a lower value of n to reduce the number.

To clear the database cache, hit the /cleardb endpoint.

Issues

The following issues are known:

  • lack of strong error handling -> currently if one or both user IDs don't exist, a "page does not exist" error is shown
  • Twitter API limits only return the first (100?) users in the list of friends/followers, so if a user has many thousands of followers it may not work (Ruby gem and Twitter API hard limits)

Future enhancements

A few areas could be tided up:

  • better error handling
  • no real need for the query to direct to a separate page, make this dynamic
  • add a static page with some background information on how it works
  • nicer mobile support (hide fork me banner)
Something went wrong with that request. Please try again.