Last active
December 18, 2015 22:19
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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