Sinator baru saja saya rilis versi 3. Sinator merupakan generator web aplikasi yang menggunakan Sinatra.

Berikut perbedaan dibandingkan versi sebelumnya:

  • Mengganti Thin dengan Puma web server
  • Menyediakan konfigurasi untuk environment developement dan production
  • Mengganti Sinatra-Asset-Pipeline dengan Sprockets
  • Menambah Rake task untuk assets:precompile dan assets:clean
  • Semua ruby gems yang ada di Gemfile menggunakan version

Daftar Ruby Gems yang digunakan

  • sinatra
  • sinatra-contrib
  • encrypted_cookie
  • Sinatra::Reloader hanya untuk development
  • puma
  • Rack::Session::EncryptedCookie
  • Rack::Csrf
  • sequel
  • sequel_pg sebagai PostgreSQL adapter
  • sprockets
  • sass
  • uglifier
  • tux untuk console

Instalasi

gem install sinator

Cara Pakai

generate app pada current directory tanpa database

sinator -n my_app

generate app pada target directory tanpa database

sinator -n my_app -t target/dir

generate app pada current directory dengan database. Opsi -d akan membuat Sinator generate aplikasi dengan Sequel ORM dan PostgreSQL adapter.

sinator -n my_app -d

Contoh Aplikasi

See github.com/kuntoaji/todo_sinator

Contoh Penggunaan

Contoh ini berasumsi PostgreSQL telah running dan database yang akan digunakan telah dibuat.

  1. run sinator -n my_app -d
  2. cd my_app
  3. run bundle install
  4. Lakukan konfigurasi database pada config/database.yml
  5. Buat file db/migrations/001_create_artists.rb dan tulis kode berikut:

    Sequel.migration do
      up do
        create_table(:artists) do
          primary_key :id
          String :name, :null=>false
        end
      end
    
      down do
        drop_table(:artists)
      end
    end
    
  6. run rake db:migrate
  7. Buat file app/models/Artist.rb dan tulis kode berikut:

    class Artist < Sequel::Model
    end
    
  8. Buat file app/routes/artists.rb dan tulis kode berikut:

    class MyApp
      get '/artists' do
        @artists = Artist.all
        erb :"artists/index"
      end
    
      post '/artists' do
        @artist = Artist.new
        @artist.name = params[:name]
        @artist.save
    
        redirect '/artists'
      end
    end
    
  9. Buat file app/views/artists/index.erb dan tulis kode berikut:

    <h1>List of Artist</h1>
    <ul>
      <% @artists.each do |artist| %>
        <li><%= artist.name %></li>
      <% end %>
    </ul>
    
    <form action="/artists" method="post">
      <%= Rack::Csrf.tag(env) %>
      <input type="text" name="name" />
      <button>Submit</button>
    </form>
    
  10. run server bundle exec puma
  11. buka url di browser localhost:9292/artists

Production

Di production by default serve assets seperti Javascript dan CSS akan di-disable karena lebih baik melalui Nginx atau Apache. Untuk melakukan assets precompile dan running server di production dapat menggunakan perintah berikut:

RACK_ENV=production bundle exec rake assets:precompile
RACK_ENV=production bundle exec puma