Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A Sinatra/Redis app - does one Twitter user follow another?
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
static
views Enabled the application to run locally if Redis is installed
.cfignore Updated for Ruby 2.0
.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.