sinatraでアプリを作ったけど、デーモン起動と他のマシンからのアクセスがしたかったので結局padrinoに移行した。
sinatraで動かす
最小限のサンプルアプリ書いてそれを実行してみた。
gemがインストールされていなければgem install sinatra slim
が必要。
コードを書く
require 'sinatra'
require 'slim'
get '/index' do
slim :index
end
def greet
"Hello World!"
end
__END__
@@index
h1 = greet
起動
$ ruby app.rb -p 3000
ポート指定がない場合は4567ポートで起動される。
http://localhost:3000/indexにアクセスするとHello World!と表示される。
sinatraをデーモンで起動する
unicornを使ってデーモン起動する。
基本的には先ほど作ったapp.rbを改造する。
gemがインストールされていなければgem install unicorn
が必要。
コードを書く
require 'sinatra'
require 'slim'
class App < Sinatra::Base
get '/index' do
slim :index
end
def greet
"Hello World!"
end
end
App.run!
h1 - greet
worker_processes 2
listen '/tmp/unicorn.sock'
stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__))
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__))
preload_app true
tmpフォルダを作成しておく
起動
$ unicorn -c unicorn.conf -D
- http://localhost:4567/index にアクセスするとHello World!と表示される。
- しかし、localhostまたは127.0.0.1ではなく、別のマシンからアクセスしようとしたらつながらなかった。
- Sinatraがデフォルトでは外部から繋がらなくなってたよに詳細・対策が書いてあった
- (@k-ta-yamada さんから頂いたご指摘より)
padrinoで動かす
gemがインストールされていなければgem install padrino
が必要。
padrino generateとかで適当に構成が作られるのであとは上で作ったファイルを配置して、ちょこっと修正するだけ。
コード
以下を実行した。
$ padrino g project sample -e slim
$ padrino g controller sample get:index
以下のファイルを変更した
h1 = greet
Sample::App.controllers :sample do
get :index, :map => '/' do
slim :"sample/index"
end
end
Sample::App.helpers do
def greet
"Hello World!"
end
end
起動
$ padrino start -p 3000 -d
おわりに
http://localhost:3000/indexにアクセスするとHello World!と表示される。
別のマシンからhttp://(padrinoで起動したマシンのIPアドレス):3000にアクセスしても見れた。
小さいアプリでもサクット作って動かしてみる程度ならsinatraでもいいが、ある程度の期間使うならpadrinoを使ったほうがいいと感じた。
~ただの宣伝~
- 全国のSeleniumer必読
- Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください