Sinatra
Page content
Tips
いろいろ Tips めも
動的に URL を生成するベストプラクティス
調べた感じ:
「Rails だと named routes があるけど Sinatra ではどうルーティングするの?」ごもっともな疑問。「基本的には複雑なことをやらないしそうだよ。やりたかったら自分で view helper 書かないとね。」 - StackOverflow - Correct Way to do Routes in Sinatra Views
Sinatra 1.2 で初めて url helper が出たようだけど、「url helper 以上に難しいことはしないよ、シンプルにやれ」とのこと。 - Sinatra 1.2 release の URL helper の箇所
ということで (多分) ベストプラクティスは、 url
helper を使えば 手元の開発環境で rackup したときも、サーバ上にデプロイして サブディレクトリを切ったときも、柔軟に URL を生成できる。
公式ドキュメントはこちらの Generating URLs
- 例: view にコレを書くと
<li> <a href=<%= url('/webui/lookup') %>>lookup</a> </li>
- 手元で
bundle exec rackup
するとhttp://localhost:9292/webui/lookup
へのリンクが作成される - サーバ上で passenger で
RackBaseURI /secondapp
を指定して apache 動かすとhttp://myserver.example.com/secondapp/webui/lookup
へのリンクが生成される。
passenger + apache + sinatra でサーバ上で稼働させる手順
- 前提:
- user: george
- ruby 2.3.3 (rbenv でインストール)
- gem, bundler も入れる
- 動かしたいアプリ
myapp
を セットアップする
cd ~/
git clone https://somewhere/myapp.git
cd ~/myapp/
bundle install --path=.bundle
- apache インストール: 省略
- welcome.conf とか消そうね
- passenger インストール
gem install passenger
sudo chmod o+x "/home/george"
sudo ln -sv ~/myapp/public /var/www/html/myapp
passenger-install-apache2-module
-> 実行後、設問はすべてenterを入力, 一部メモ
/etc/httpd/conf.d/passenger.conf
を作成する。細かいところは環境に応じて修正してほしいが、 passenger-install-apache2-module の途中でしたメモを活用して作っていく:
LoadModule passenger_module /home/george/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.2.1/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/george/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.2.1
PassengerDefaultRuby /home/george/.rbenv/versions/2.3.3/bin/ruby
</IfModule>
RackBaseURI /myapp
RackEnv production
<Directory /myapp>
Options ExecCGI FollowSymLinks
Options -MultiViews
AllowOverride All
Order Allow,Deny
Allow From All
</Directory>
# 必要なら Passenger が追加するHTTPヘッダを削除するための設定。
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"
# 必要ならこの辺も
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
- configtest してから apache 再起動して利用開始
sudo service httpd configtest
sudo service httpd restart
いじょう。