2021 May 30.
2021 Feb. 14.
2020 Nov. 07.
2018 Nov. 04.
2018 Oct. 08.
2018 Apr. 21.
sinatraインストール
(sinatraはBundlerでインストールできるので、このセクションは無視して下の「sinatraインストールに先立ってプロジェクト初期化」から始めればよい)
(Rbenv、Bundlerがシステムワイドにインストールされた環境にて)
# rbenv exec gem install sinatra # rbenv rehash ## sinatra-reloaderを利用するためにsinatra-contribをインストールする ##(システムワイドにインストール) # rbenv exec gem install sinatra-contrib # rbenv rehash ## gemをプロジェクトワイドではなくシステムワイドで利用する設定 # su - USER $ cat ~/.bundle/config BUNDLE_DISABLE_SHARED_GEMS: "false"
sinatraインストールに先立ってプロジェクト初期化
$ mkdir PROJECT $ cd PROJECT
gemをシステムワイドにインストールせず、プロジェクト毎にインスール場合は下の「プロジェクトを初期化」に進む
gemをシステムワイドにインストールする場合はその設定を行う
(システムワイドでは実行時にファイル属性エラーが出るので、gemをシステムワイドにインストールせず、プロジェクト毎にインスールした)
gemをシステムワイドにインストールする設定
BUNDLE_DISABLE_SHARED_GEMS: '0'
を次のいずれかの場所に設定する。
・ ~/.bundle/config // ユーザーワイドに設定
・ PROJECT/.bundle/config // プロジェクト毎に設定ファイルで設定
プロジェクトを初期化
$ cd PROJECT $ rbenv exec bundle init
利用するgemを記述
$ vim Gemfile gem 'sinatra' gem "sinatra-reloader" gem 'webrick' # ruby 3.0以降ではwebrickが付属しないので、gemとして別途インストールする
gemインストール
(システムワイドでは実行時にファイル属性エラーが出るのでプロジェクト毎にgemをインスールした)
## システムワイドにgemをインストールする場合 $ cd PROJECT $ rbenv exec bundle install
## プロジェクト毎にgemをインストールする場合 $ cd PROJECT $ rbenv exec bundle install --path vendor/bundle
port開放
デフォルトで4567ポートを利用する
# ufw enable ## LAN内ホストからのアクセス許可 # ufw allow proto tcp from 192.168.1.0/24 to any port 4567 # ufw allow proto udp from 192.168.1.0/24 to any port 4567 ## OpenVPNクライアントからのアクセス許可 # ufw allow proto tcp from 10.8.0.0/24 to any port 4567 # ufw allow proto udp from 10.8.0.0/24 to any port 4567 # ufw reload
アプリ構成
・ プロジェクトディレクトリ直下にメインのrubyスクリプトを置く。
・ プロジェクトディレクトリ直下にpublic, viewsの2ディレクトリを作成する。
publicディレクトリ
静的ファイル(html, css, jsなど)・表示するだけのファイル(画像、cssなど)を置くためのディレクトリ。
public内のファイルは公開URLのルートディレクトリ直下にマッピングされる。
viewsディレクトリ
テンプレートファイルを管理しておくディレクトリ。
rubyコードとHTMLコードを分離し、HTMLコードはviewsディレクトリに置く。
rubyプログラムを埋め込んでHTMLを記述したerbなどはviewsディレクトリに置く。
動作の仕組み、おおまかな使い方
プロジェクトディレクトリ直下のメインのrubyスクリプト(最初に起動するrubyスクリプト)の書き方
class MyApp < Sinatra::Base # デフォルトではローカルホストからのアクセスしか受け付けない設定をどのアドレスからでもアクセス可能とする set :bind, '0.0.0.0' # encoding: utf-8 DIRSEPARATOR = File::ALT_SEPARATOR || File::SEPARATOR # enable sessions set :sessions, secret: 'mySecretKeyIsHere' # escape_htmlメソッドをhというalias名称にして使う # <%= h VARIABLE %> HTML にはそのまま書けない文字を実体参照に置き換え。HTML の「&“<>」をエスケープ helpers do # define method "h" to escape HTML include Rack::Utils; alias_method :h, :escape_html end # root URL( IP-ADDRESS:4567/ )へのアクセス時にindex.erbを開く get '/' do erb :index end # root-URL/mypage へのアクセス時にindex_mypage.erbを開く get '/mypage' do erb :index_mypage end end
プロジェクト公開
$ bundle exec ruby ./app.rb -e production
公開アプリ利用
httpで4567ポートにアクセスする。
http://IP.ADDRESS:4567
ERBの記法
<%= code %> codeを実行して、結果を埋め込む
<% code %> codeを実行するだけ、結果は埋め込まない
<%= h VARIABLE %> HTML にはそのまま書けない文字を実体参照に置き換え。HTML の「&“<>」をエスケープ
変数の受け渡し
受け取ったパラメーターをテンプレート(index.erb)内の変数にするには@nameなどに代入する。
@name = params[:name]
rubyスクリプト内で@を付けた変数は、呼び出された.erbファイル内でも利用できる。
if文の記述
<% if line =~ /#{@searchWord}/ then %>
<%= line %>
<% end %>