Help us understand the problem. What is going on with this article?

Webアプリのスケルトンを作る(sinatra編)

More than 3 years have passed since last update.

Webアプリを作るときに以下の機能と環境をサッと使えるようにするためのスケルトンを作りました。
サーバーサイド
sinatra / slim / activerecord / sqlite3 / rspec
フロントエンド
sass / coffeescript / jquery / bootstrap3

ゴールとしては、コマンド一発でWebサーバーを起動してフロントエンド周りをビルドして、
js、css、rubyのファイル更新時にライブリロードさせることです。ビルドツールはgulpを使います。
とりあえずgemファイルから。

Gemfile
source 'https://rubygems.org'


gem 'sinatra'
gem 'slim'
gem 'sqlite3'
gem 'sinatra-activerecord'
gem 'rake'



group :development, :test do  
  gem 'shotgun' # ローカルサーバー
  
  gem 'foreman' # コマンドの一括実行
  
  gem 'rspec'
end

アプリケーションの起動にはforemanというgemを使います。
foremanはProcfileに書いたコマンドを一括で実行してくれます。

bundle exec foreman start

これでサーバーを起動してビルドを走らせたいのでProcfileを次のように書きます。

Procfile
application: bundle exec shotgun -p 8000

gulp: gulp

foremanではshotgunというgemを実行します。
shotgunを使うことでファイル編集時にサーバー再起動する必要がなくなるので、
sinatraアプリ側にsinatra/reloaderを記述せずにすみます。
ホストを指定したい場合はoオプションで指定します。ポートを指定しない場合は9393が使われます。
shotgunはrackアプリケーションなので、config.ruを読み込んで実行します。

config.ru
require './app'
run App

ここではsinatraのapp.rbをロードして実行しています。
これで、sinatra -> shotgun -> foreman の流れができました。
あとはapp.rbです。

app.rb
# encoding: utf-8
require 'bundler'
Bundler.require
set :database, { :adapter => 'sqlite3', :database => 'db/app.db' }

class App < Sinatra::Base

  
  get '/' do    
    slim :index  
  end


end

Bundler.requireで手持ちのgemを呼び出しておいて、sinatra-activerecordを使ってDB接続します。
アプリから使うにはこれでいいのですがマイグレーションもしたいので、rakeを実行できるようにRakefileも作ります。

Rakefile
require 'sinatra/activerecord/rake'


namespace :db do
  task :load_config do  
    require './app'  
  end
end

これでrake db:createやrake db:migrateができるようになります。
サーバーサイドはここまでにして、次はフロントエンドの方やっていきます。

day-1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした