アプリケーションの作成 - Sinatra

Sinatra アプリ

ディレクトリ構成

  • project
    • views
      • content
        • index.erb
    • app.rb
    • config.ru

app.rb

require "sinatra/base"

class SampleApp < Sinatra::Base
  get '/content' do
    erb :"content/index"
  end
end

config.ru

require "./app"

run SampleApp

アプリの起動

bundle exec rackup

コントローラーを分ける

ディレクトリ構成

  • project
    • controllers
      • file
    • public
      • css
        • style.css
      • images
        • hello.png
      • javascripts
        • script.js
    • views
      • content
        • index.erb
      • top
        • index.erb
    • app.rb
    • config.ru
    • Gemfile
    • Gemfile.lock

Gemfileを作成するには「 bundle init 」を実行します。

Gemfile

# frozen_string_literal: true

source "https://rubygems.org"

gem 'sinatra'
gem "rack"
gem 'puma'
gem "rackup"
gem 'sinatra-contrib'

config.ru

require './app'

use Rack::Static, :urls => ["/css", "/images", "/javascripts"], :root => "public"
 
run Rack::URLMap.new({
  '/content' => ContentController,
  '/top' => TopController
})

app.rb

require 'sinatra/base'
require './controllers/content_controller'
require './controllers/top_controller'

views/content/index.erb

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="/css/style.css" type="text/css" media="all">
  <script src="/js/script.js"></script>
</head>
<body>
  <h1>content/index</h1>
  <img src="/images/hello.png" alt="">
  
  <p><%= @message %></p>
</body>
</html>

views/top/index.erb

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>top/index</h1>
  <p><%= @message %></p>
</body>
</html>

controllers/base.rb

require 'sinatra/base'

class Base < Sinatra::Base
  set :root, File.join(File.dirname(__FILE__), '..')
  set :views, Proc.new { File.join(root, "views") } 
end

controllers/content_controller.rb

require './controllers/base'
require 'sinatra/reloader'

class ContentController < Base
  get '/' do
    @message = "hello"
    erb :"content/index"
  end
end

controllers/top_controller.rb

require './controllers/base'
require 'sinatra/reloader'

class TopController < Base
  get '/' do
    @message = "hello"
    erb :"top/index"
  end
end

public/css/style.css

h1 { color: red; }

Sinatra アプリの起動

bundle exec rackup

gem install

bundle install --path vendor/bundle

アンインストールするには、次のようにしますが管理者権限でコマンドプロンプトを起動する必要があります。

bundle exec gem uninstall gem名