Ruby, Heroku and Groonga tutorial 2014
enviroments
% sw_vers ProductName: Mac OS X ProductVersion: 10.9.4 BuildVersion: 13E28
Ruby
install ruby
% rbenv install 2.1.2 % rbenv global 2.1.2
use plugin
% cd $RBENV_ROOT/plugins % git clone git://github.com/ianheggie/rbenv-binstubs.git
install bundler
% gem install bundler travis travis-lint % rbenv rehash
create project
% mkdir ~/ruby-project && cd $_ % bundle init % bundle install --path vendor/bundle --binstubs=vendor/bundle/bin
you can see .bundle and Gemfile.lock.
install gems
create Gemfile like this.
% cat Gemfile ruby '2.1.2' source "https://rubygems.org" gem "sinatra" # gem "rroonga" group :development, :test do gem 'rspec' gem 'rack-test' gem 'coveralls' end
% bundle install
check it.
% bundle show sinatra ~/ruby-project/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5
create and run app.rb
create app.rb like this.
require 'sinatra'; get '/' do 'Hello, World!' end
run it.
% bundle exec ruby app.rb [2014-08-23 11:10:38] INFO WEBrick 1.3.1 [2014-08-23 11:10:38] INFO ruby 2.1.2 (2014-05-08) [x86_64-darwin13.0] == Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick [2014-08-23 11:10:38] INFO WEBrick::HTTPServer#start: pid=68339 port=4567
open it.
% open http://localhost:4567
Git
create .gitignore
% cat .gitignore .bundle vendor/
first commit
% git init % git add ./ % git commit -m 'first commit'
Heroku
install heroku-toolbelt
download from here https://toolbelt.heroku.com/
and check it.
% heroku --version heroku-toolbelt/3.10.1 (x86_64-darwin13.0) ruby/2.1.2
create config.ru
% cat config.ru require './app' run Sinatra::Application
check it.
% bundle exec rackup config.ru
create .buildpacks like this
% cat .buildpacks https://github.com/heroku/heroku-buildpack-ruby
create Procfile like this.
% cat Procfile web: bundle exec rackup config.ru -p $PORT
commit it.
% git add config.ru .buildpacks Procfile % git commit -m 'added files for Heroku'
deploy
% heroku create % heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git % git push heroku master % heroku open
RSpec
create .rspec
% echo '--color -f d' > .rspec
create spec/app_spec.rb like this
% cat spec/app_spec.rb
require 'coveralls'
Coveralls.wear!
ENV['RACK_ENV'] = 'test'
require './app'
require 'rspec'
require 'rack/test'
describe 'The HelloWorld App' do
include Rack::Test::Methods
def app
Sinatra::Application
end
it "says hello" do
get '/'
expect(last_response).to be_ok
expect(last_response.body).to eq('Hello, World!')
end
end
test it.
% bundle exec rspec spec The HelloWorld App says hello Finished in 0.01777 seconds (files took 0.13907 seconds to load) 1 example, 0 failures
commit it
% git add .rspec spec/app_spec.rb % git commit -m 'added test case.'
Travis CI & Coveralls
sinup Travis CI COVERALLS and add repository.
after that create .travis.yml like this.
% cat .travis.yml language: ruby rvm: - 2.1.2 script: bundle exec rspec spec before_install: - curl --silent --location https://github.com/groonga/groonga/raw/master/data/travis/setup.sh | sh
create .coveralls.myl
% cat .coveralls.yml service_name: travis-ci
create README.md like this
[](https://travis-ci.org/yourname/ruby-project) [](https://coveralls.io/r/yourname/ruby-project)
commit it.
% git add .travis.yml .coveralls.yml README.md % git commit -m 'use travis ci'
push github
% git push origin master
you can see build passing and coverage 100% badges!!
Groonga
install Groonga
% brew install groonga
modify Gemfile and bundle install
% git diff Gemfile ruby '2.1.2' source "https://rubygems.org" gem "sinatra" +gem "rroonga" group :development, :test do gem 'rspec' % bundle install
modify .gitignore like this
% cat .gitignore .bundle vendor/ groonga/database*
create groonga dir
% mkdir groonga % touch groonga/init.rb
modify .buildpacks like this
% cat .buildpacks https://github.com/groonga/heroku-buildpack-groonga https://github.com/heroku/heroku-buildpack-ruby
commit it.
% git add Gemfile Gemfile.lock .gitignore .buildpacks groonga/init.rb % git commit -m 'use groonga'
modify app.rb like this.
require 'sinatra';
require 'groonga'
require 'pathname'
database_file = Pathname('groonga/database')
database_directory = database_file.dirname
database_directory.mkpath unless database_directory.exist?
if database_file.exist?
Groonga::Database.open(database_file.to_s)
else
Groonga::Database.create(:path => database_file.to_s)
end
if not Groonga["Items"]
Groonga::Schema.create_table("Items", :type => :hash)
items = Groonga["Items"]
items.add("hello")
Groonga::Schema.change_table("Items") do |table|
table.text("title")
end
items["hello"].title = "Hello, World!"
end
get '/' do
Groonga["Items"]["hello"].title
#'Hello, World!'
end
test it.
% bundle exec rspec spec
commit it.
% git add app.rb % git commit -m 'replace hello'
deploy heroku and open it
% git push heroku master % heroku open
Congratulations!! You've accomplished this tutorial!!