Skip to content

Instantly share code, notes, and snippets.

@wmaryszczak
Last active December 18, 2015 22:19
Show Gist options
  • Save wmaryszczak/5853771 to your computer and use it in GitHub Desktop.
Save wmaryszczak/5853771 to your computer and use it in GitHub Desktop.
Script to generate ruby sinatra application skeleton. It adds: basic directory tree; boot file with requires and STDOUT logger; default controller; bundler dependencies; nginx/passenger configuration files; rake start task. How to use: ./sinatra_generator.sh application_name && cd application_name && rake start
#!/bin/bash
#variables
dirname=$1
base_name="$(basename $dirname)"
APP_NAME="$(echo $base_name | tr '[:lower:]' '[:upper:]')"
#folders
mkdir -p $dirname/app/controllers
mkdir -p $dirname/app/tasks
mkdir -p $dirname/lib
mkdir -p $dirname/config/initializers
mkdir -p $dirname/public
#files
#default controller
cat >$dirname/app/controllers/main.rb <<EOF
get '/' do
'${APP_NAME} Generated automatically'
end
EOF
#boot file
cat >$dirname/config/boot.rb <<EOF
${APP_NAME}_ROOT = File.expand_path(File.dirname(__FILE__) + '/..') unless defined?(${APP_NAME}_ROOT)
${APP_NAME}_ENV = ENV["${APP_NAME}_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(${APP_NAME}_ENV)
require 'bundler/setup'
Bundler.require(:default, ${APP_NAME}_ENV)
set :root, ${APP_NAME}_ROOT
require 'logger'
Dir["#{${APP_NAME}_ROOT}/config/initializers/*.rb"].sort.each {|file| require file}
Dir["#{${APP_NAME}_ROOT}/lib/*.rb"].sort.each {|file| require file}
Dir["#{${APP_NAME}_ROOT}/app/controllers/*.rb"].sort.each {|file| require file}
EOF
#nginx integration
echo "passenger_base_uri /$dirname;" > $dirname/nginx.conf
cat >$dirname/config.ru <<EOF
#! /usr/bin/ruby
# This is the rackup file for phusion passenger / rack
require File.expand_path(File.dirname(__FILE__) + '/config/boot')
run Sinatra::Application
EOF
#rakefile
cat >$dirname/Rakefile <<EOF
# encoding: UTF-8
# Load all external files
Dir["app/tasks/**/*.rake*"].sort.each {|ext| load ext}
desc "Run sinatra web server"
task :start do
sh "bundle exec shotgun -o 0.0.0.0 -p 4567 ./config/boot.rb"
end
EOF
#dependencies
cd $dirname
bundle init
cat >Gemfile <<EOF
source "http://rubygems.org"
gem 'sinatra'
group :development do
gem 'capistrano'
gem 'capistrano-ext'
gem 'rvm-capistrano'
gem "rake"
gem "shotgun"
end
group :test do
gem 'awesome_print'
gem 'rspec'
gem 'rack-test', :require => 'rack/test'
end
EOF
bundle
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment