概要
sinatra-contrib というパッケージを使うと簡単に設定ファイルを読み込むことができます
実際に設定ファイルを使ったサンプルの sinatra アプリケーションを紹介します
環境
- CentOS 7.3.1611
- ruby 2.3.3p222
- sinatra 2.0.0
- sinatra-contrib 2.0.0
ライブラリのインストール
- bundle init
- vim Gemfile
gem "sinatra"
gem "sinatra-contrib"
- bundle install
また今回のディレクトリ構成は以下の通りです
.
├── app.rb
├── config.ru
├── config.yml
├── Gemfile
├── Gemfile.lock
└── views
└── hello.erb
アプリの作成
- vim app.rb
require "sinatra/base"
require "sinatra/config_file"
class MyApp < Sinatra::Base
register Sinatra::ConfigFile
config_file './config.yml'
get '/' do
@message = settings.message
@friends = settings.friends
erb :hello
end
end
Sinatra::Base を継承して独自のコントローラクラスを定義します
そして、設定ファイルを読み込むために Sinatra::ConfigFile を登録します
読み込みに成功した後は settings
というオブジェクトを参照することで値を取得することができます
今回は取得した値をテンプレートに渡してテンプレート側で値を確認します
設定ファイルの作成
- vim config.yml
message: "My friends"
friends:
- name: 'bob'
age: 20
favorites:
- 'baseball'
- 'soccer'
- name: 'tom'
age: 19
favorites:
- 'soccer'
app.rb と同じディレクトリに配置します
YAML 形式で記述します
今回は配列も使っています
テンプレートファイルの作成
- mkdir views
- vim views/hello.erb
<h2>"<%= @message %>"</h2>
<% @friends.each do |f| %>
<div>
<div>name: <%= f['name'] %></div>
<div>age: <%= f['age'] %></div>
<div>favorites:</div>
<% f['favorites'].each do |fa| %>
<div>- <%= fa %></div>
<% end %>
</div>
<% end %>
app.rb から呼び出されるテンプレートファイルです
設定ファイルの内容を出力しています
ハッシュとして渡ってくるので ruby のハッシュを参照する方法で値を取り出すことができます
アプリ起動用の rackup ファイル作成
- vim config.ru
require 'bundler'
Bundler.require
require './app'
run MyApp
rackup コマンドでアプリを起動するためのスクリプトです
動作確認
- bundle exec rackup
- curl localhost:9292
で config.yml に書かれた情報が HTML で出力されると思います
最後に
sinatra で YAML で書かれた設定ファイルを読む込む方法を紹介しました
値の参照は settings オブジェクトを使って参照しますがスコープは sinatra アプリケーション内のみとなります
なので、自分で定義したライブラリの関数などに値を渡したい場合は引数などで渡す必要があります (ライブラリ側で settings を参照することはできません)
0 件のコメント:
コメントを投稿