Skip to content

Hello World on Cloud Foundry v2

by on July 22, 2013

It’s been very busy around here and I’ve been lagging behind on the updates to Cloud Foundry v2. If you’re like me, hopefully you will find this a useful update going from way-old vmc on v1 to cf on v2:

I’m going to create a new account on Cloud Foundry and push my good old bacon pancakes ruby sinatra app to my new account.

Step 1: Create a new account.  Creating a new account on Cloud Foundry, especially with a promo code, is much easier now. No more temporary passwords that were sometimes hard to read.

Go to cloudfoundry.com
Click on the “free trial” button
Enter email address and Promo code (you can use “preshavedyak”)
Check your email and click on the link in the email from Cloud Foundry
Create a password

Now you have an account and password!

Step 2: Update your gems, target, and then log in.

I followed the steps on http://docs.cloudfoundry.com/docs/dotcom/getting-started.html#install-cf

$ gem install cf
$ cf target api.run.pivotal.io
$ cf login

From the option listed, I chose “1” (development)

Step 3: Push your app. First I was lazy and tried to see if my existing app would push as is.

$ cf push
Name> baconpancakesv2
Instances>1
Memory Limit>256M
Subdomain>baconpancakesv2
Domain>cfapps.io
Create services for application?>n
Save configurations?>n

Error for the lazy! I got this:

Error:
—–> Downloaded app package (4.0K)
/var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:44:in `build_pack': Unable to detect a supported application type (RuntimeError)
from /var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:26:in `block in compile_with_timeout’
from /usr/lib/ruby/1.9.1/timeout.rb:68:in `timeout’
from /var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:25:in `compile_with_timeout’
from /var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:16:in `block in stage_application’
from /var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:12:in `chdir’
from /var/vcap/packages/dea_next/buildpacks/lib/buildpack.rb:12:in `stage_application’
from /var/vcap/packages/dea_next/buildpacks/bin/run:10:in `<main>’
Checking status of app ‘baconpancakestest’…Application failed to stage

Step 4: Set up for your ruby sinatra app.

So I decided to read further on http://docs.cloudfoundry.com/docs/using/deploying-apps/ruby/

It told me to go to http://bundler.io/
I followed these steps:

a) $ gem install bundler
b) Create doc “Gemfile” (no extension to the file) and save this text in the file:
source 'https://rubygems.org'

The site says to add the following:
gem ‘nokogiri’
gem ‘rack’, ‘~>1.1′
gem ‘rspec’, :require => ‘spec’

In our case, it is a ruby/sinatra app, so I paste the following in the Gemfile:
source 'https://rubygems.org'
gem 'sinatra'

Save this file in the folder with my baconpancakesv2.rb app

$ bundle install
Skipped $ git add Gemfile Gemfile.lock

Error: I needed to add the ruby version to the Gemfile. In my case, it is ruby ‘1.9.3’
Updated Gemfile to say:
source 'https://rubygems.org'
gem 'sinatra'
ruby '1.9.3'

$ bundle install
This creates the Gemfile.lock file

c) Update the baconpancakes.rb app

I renamed it baconpancakesv2.rb
I followed the steps on http://www.sinatrarb.com/extensions.html
Change the first line of the app:
Delete: require ‘sinatra’
Replace with: class YakApp < Sinatra::Base
and add “end” in the last line

Here is the code for baconpancakesv2.rb:
class YakApp < Sinatra::Base
get '/' do
def youtube_embed(youtube_url)
if youtube_url[/youtu\.be\/([^\?]*)/]
youtube_id = $1
else
# Regex from # http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url/4811367#4811367
youtube_url[/^.*((v\/)|(embed\/)|(watch\?))\??v?=?([^\&\?]*).*/]
youtube_id = $5
end
%Q{[youtube https://www.youtube.com/watch?v=#youtube_id&w=560&h=315]}
end
"<h1>Bacon Pancakes from Cloud Foundry</h1>"+youtube_embed('youtu.be/zalYJacOhpo')
end
end

d) Create config.ru

Return to http://docs.cloudfoundry.com/docs/using/deploying-apps/ruby/
Follow instructions to create config.ru file.
Site says:
require './hello_world'
run HelloWorld.new

In my case, for our sinatra app, I include the following:
require 'sinatra'
require './baconpancakesv2' (Make sure this is your own directory name)

map '/' do
run YakApp
end

Also follow the instructions on http://www.sinatrarb.com/extensions.html
So the config.ru file will include:
require 'sinatra'
require 'sinatra/base'
require './baconpancakesv2'
map '/' do
run YakApp
end

Step 5: Try to push the app the right way.

So now you should have a directory that has these 4 files:

  • rb app
  • Gemfile
  • Gemfile.lock
  • config.ru

Now do the cf push from that directory. You should be able to push your app to Cloud Foundry. If you used my app, it should look like this: http://baconpancakesv2.cfapps.io

Of course, this is a limited case. Please consult the Cloud Foundry documentation for further info.

Also check out Andy Piper's github repo for this same app: https://github.com/andypiper/yak/tree/andyp

Thanks to Andy for his help!

Step 6: Manage your account in the browser.

Once you have your account. Don't forget to check out your new account console in the browser. Pretty nice!

About these ads
One Comment

Trackbacks & Pingbacks

  1. Easy Ruby 1.9.3 Install |

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: