Fix README.ja.md[ci skip]
This commit is contained in:
parent
af6dad2a6c
commit
e7ef61f0c4
125
README.ja.md
125
README.ja.md
|
@ -1,7 +1,7 @@
|
||||||
# Sinatra
|
# Sinatra
|
||||||
|
|
||||||
*注)
|
*注)
|
||||||
本文書は英語から翻訳したものであり、その内容が最新でない場合もあります。最新の情報はオリジナルの英語版を参照して下さい。*
|
本文書は英語から翻訳したものであり、その内容が最新でない場合もあります。最新の情報はオリジナルの英語版を参照してください。*
|
||||||
|
|
||||||
Sinatraは最小の労力でRubyによるWebアプリケーションを手早く作るための[DSL](https://ja.wikipedia.org/wiki/メインページドメイン固有言語)です。
|
Sinatraは最小の労力でRubyによるWebアプリケーションを手早く作るための[DSL](https://ja.wikipedia.org/wiki/メインページドメイン固有言語)です。
|
||||||
|
|
||||||
|
@ -70,9 +70,11 @@ ThinがあればSinatraはこれを利用するので、`gem install thin`する
|
||||||
* [名前付きテンプレート(Named Templates)](#名前付きテンプレートnamed-templates)
|
* [名前付きテンプレート(Named Templates)](#名前付きテンプレートnamed-templates)
|
||||||
* [ファイル拡張子の関連付け](#ファイル拡張子の関連付け)
|
* [ファイル拡張子の関連付け](#ファイル拡張子の関連付け)
|
||||||
* [オリジナルテンプレートエンジンの追加](#オリジナルテンプレートエンジンの追加)
|
* [オリジナルテンプレートエンジンの追加](#オリジナルテンプレートエンジンの追加)
|
||||||
|
* [カスタムロジックを使用したテンプレートの探索](#カスタムロジックを使用したテンプレートの探索)
|
||||||
* [フィルタ(Filters)](#フィルタfilters)
|
* [フィルタ(Filters)](#フィルタfilters)
|
||||||
* [ヘルパー(Helpers)](#ヘルパーhelpers)
|
* [ヘルパー(Helpers)](#ヘルパーhelpers)
|
||||||
* [セッションの使用](#セッションの使用)
|
* [セッションの使用](#セッションの使用)
|
||||||
|
* [セッションミドルウェアの選択](#セッションミドルウェアの選択)
|
||||||
* [停止(Halting)](#停止halting)
|
* [停止(Halting)](#停止halting)
|
||||||
* [パッシング(Passing)](#パッシングpassing)
|
* [パッシング(Passing)](#パッシングpassing)
|
||||||
* [別ルーティングの誘発](#別ルーティングの誘発)
|
* [別ルーティングの誘発](#別ルーティングの誘発)
|
||||||
|
@ -168,7 +170,6 @@ end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
ルーティングのパターンは名前付きパラメータを含むことができ、
|
ルーティングのパターンは名前付きパラメータを含むことができ、
|
||||||
`params`ハッシュで取得できます。
|
`params`ハッシュで取得できます。
|
||||||
|
|
||||||
|
@ -379,7 +380,6 @@ get %r{(?!/index)} do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## 静的ファイル(Static Files)
|
## 静的ファイル(Static Files)
|
||||||
|
|
||||||
静的ファイルは`./public`ディレクトリから配信されます。
|
静的ファイルは`./public`ディレクトリから配信されます。
|
||||||
|
@ -427,7 +427,6 @@ end
|
||||||
|
|
||||||
Sinatraが理解できないオプションは、テンプレートエンジンに渡されることになります。
|
Sinatraが理解できないオプションは、テンプレートエンジンに渡されることになります。
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
get '/' do
|
get '/' do
|
||||||
haml :index, :format => :html5
|
haml :index, :format => :html5
|
||||||
|
@ -457,7 +456,7 @@ end
|
||||||
|
|
||||||
<dt>default_encoding</dt>
|
<dt>default_encoding</dt>
|
||||||
<dd>
|
<dd>
|
||||||
文字エンコーディング(不確かな場合に使用される)。デフォルトは、<tt>settings.default_encoding</tt>。
|
文字エンコーディングが確実でない場合に指定。デフォルトは、<tt>settings.default_encoding</tt>。
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>views</dt>
|
<dt>views</dt>
|
||||||
|
@ -499,9 +498,9 @@ end
|
||||||
set :views, settings.root + '/templates'
|
set :views, settings.root + '/templates'
|
||||||
```
|
```
|
||||||
|
|
||||||
テンプレートはシンボルを使用して参照させることを覚えておいて下さい。
|
テンプレートの参照は、テンプレートがサブディレクトリ内にある場合でも常にシンボルで指定することを覚えておいてください。
|
||||||
サブディレクトリでもこの場合は`:'subdir/template'`のようにします。
|
(これは`:'subdir/template'`または`'subdir/template'.to_sym`のように指定することを意味します。)
|
||||||
レンダリングメソッドは文字列が渡されると、それをそのまま文字列として出力するので、シンボルを使ってください。
|
レンダリングメソッドにシンボルではなく文字列を渡してしまうと、そのまま文字列として出力してしまいます。
|
||||||
|
|
||||||
### リテラルテンプレート(Literal Templates)
|
### リテラルテンプレート(Literal Templates)
|
||||||
|
|
||||||
|
@ -511,13 +510,19 @@ get '/' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
これはそのテンプレート文字列をレンダリングします。
|
これはテンプレート文字列をレンダリングしています。
|
||||||
|
テンプレート文字列に関連するファイルパスや行数を`:path`や`:line`オプションで指定することで、バックトレースを明確にすることができます。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
get '/' do
|
||||||
|
haml '%div.title Hello World', :path => 'examples/file.haml', :line => 3
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
### 利用可能なテンプレート言語
|
### 利用可能なテンプレート言語
|
||||||
|
|
||||||
いくつかの言語には複数の実装があります。使用する(そしてスレッドセーフにする)実装を指定するには、それを最初にrequireしてください。
|
いくつかの言語には複数の実装があります。使用する(そしてスレッドセーフにする)実装を指定するには、それを最初にrequireしてください。
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
require 'rdiscount' # または require 'bluecloth'
|
require 'rdiscount' # または require 'bluecloth'
|
||||||
get('/') { markdown :index }
|
get('/') { markdown :index }
|
||||||
|
@ -540,7 +545,6 @@ get('/') { markdown :index }
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
#### Erb テンプレート
|
#### Erb テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -601,7 +605,6 @@ get('/') { markdown :index }
|
||||||
|
|
||||||
インラインテンプレート用にブロックを取ることもできます(例を参照)。
|
インラインテンプレート用にブロックを取ることもできます(例を参照)。
|
||||||
|
|
||||||
|
|
||||||
#### Sass テンプレート
|
#### Sass テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -619,7 +622,6 @@ get('/') { markdown :index }
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
#### Scss テンプレート
|
#### Scss テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -713,7 +715,6 @@ erb :overview, :locals => { :text => markdown(:introduction) }
|
||||||
|
|
||||||
MarkdownからはRubyを呼ぶことができないので、Markdownで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。
|
MarkdownからはRubyを呼ぶことができないので、Markdownで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。
|
||||||
|
|
||||||
|
|
||||||
#### Textile テンプレート
|
#### Textile テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -773,7 +774,6 @@ erb :overview, :locals => { :text => rdoc(:introduction) }
|
||||||
|
|
||||||
ノート: 他のテンプレート内で`rdoc`メソッドを呼び出せます。
|
ノート: 他のテンプレート内で`rdoc`メソッドを呼び出せます。
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
%h1 Hello From Haml!
|
%h1 Hello From Haml!
|
||||||
%p= rdoc(:greetings)
|
%p= rdoc(:greetings)
|
||||||
|
@ -819,7 +819,6 @@ AsciiDocテンプレートからRubyのメソッドを直接呼び出すこと
|
||||||
|
|
||||||
RadiusテンプレートからRubyのメソッドを直接呼び出すことができないため、ほぼ全ての場合にlocalsを指定する必要があるでしょう。
|
RadiusテンプレートからRubyのメソッドを直接呼び出すことができないため、ほぼ全ての場合にlocalsを指定する必要があるでしょう。
|
||||||
|
|
||||||
|
|
||||||
#### Markaby テンプレート
|
#### Markaby テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -1015,7 +1014,6 @@ end
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
テンプレートのソースはRubyの文字列として評価され、その結果のJSON変数は`#to_json`を使って変換されます。
|
テンプレートのソースはRubyの文字列として評価され、その結果のJSON変数は`#to_json`を使って変換されます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -1068,7 +1066,7 @@ get '/:id' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
このやり方は他のテンプレート内で部分テンプレートとして表示する時に典型的に使用されます。
|
これは他のテンプレート内で部分テンプレートとして表示する典型的な手法です。
|
||||||
|
|
||||||
### `yield`を伴うテンプレートとネストしたレイアウト
|
### `yield`を伴うテンプレートとネストしたレイアウト
|
||||||
|
|
||||||
|
@ -1105,7 +1103,6 @@ end
|
||||||
`liquid`, `slim `, `wlang`。
|
`liquid`, `slim `, `wlang`。
|
||||||
また汎用の`render`メソッドもブロックを取れます。
|
また汎用の`render`メソッドもブロックを取れます。
|
||||||
|
|
||||||
|
|
||||||
### インラインテンプレート(Inline Templates)
|
### インラインテンプレート(Inline Templates)
|
||||||
|
|
||||||
テンプレートはソースファイルの最後で定義することもできます。
|
テンプレートはソースファイルの最後で定義することもできます。
|
||||||
|
@ -1147,7 +1144,7 @@ get '/' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
「layout」というテンプレートが存在する場合、そのテンプレートファイルは他のテンプレートがレンダリングされる度に使用されます。`:layout => false`で個別に、または`set :haml, :layout => false`でデフォルトとして、レイアウトを無効にすることができます。
|
「layout」という名前のテンプレートが存在する場合は、そのテンプレートファイルは他のテンプレートがレンダリングされる度に使用されます。`:layout => false`で個別に、または`set :haml, :layout => false`でデフォルトとして、レイアウトを無効にすることができます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
get '/' do
|
get '/' do
|
||||||
|
@ -1181,6 +1178,22 @@ end
|
||||||
|
|
||||||
これは、`./views/index.myat`をレンダリングします。Tiltについての詳細は、https://github.com/rtomayko/tilt を参照してください。
|
これは、`./views/index.myat`をレンダリングします。Tiltについての詳細は、https://github.com/rtomayko/tilt を参照してください。
|
||||||
|
|
||||||
|
### カスタムロジックを使用したテンプレートの探索
|
||||||
|
|
||||||
|
オリジナルテンプレートの検索メカニズムを実装するためには、`#find_template`メソッドを実装します。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
configure do
|
||||||
|
set :views [ './views/a', './views/b' ]
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_template(views, name, engine, &block)
|
||||||
|
Array(views).each do |v|
|
||||||
|
super(v, name, engine, &block)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
## フィルタ(Filters)
|
## フィルタ(Filters)
|
||||||
|
|
||||||
beforeフィルタは、リクエストのルーティングと同じコンテキストで各リクエストの前に評価され、それによってリクエストとレスポンスを変更可能にします。フィルタ内でセットされたインスタンス変数はルーティングとテンプレートからアクセスすることができます。
|
beforeフィルタは、リクエストのルーティングと同じコンテキストで各リクエストの前に評価され、それによってリクエストとレスポンスを変更可能にします。フィルタ内でセットされたインスタンス変数はルーティングとテンプレートからアクセスすることができます。
|
||||||
|
@ -1263,10 +1276,9 @@ helpers FooUtils, BarUtils
|
||||||
|
|
||||||
その効果は、アプリケーションクラスにモジュールをインクルードするのと同じです。
|
その効果は、アプリケーションクラスにモジュールをインクルードするのと同じです。
|
||||||
|
|
||||||
|
|
||||||
### セッションの使用
|
### セッションの使用
|
||||||
|
|
||||||
セッションはリクエスト間での状態維持のために使用されます。その起動により、ユーザセッションごとに一つのセッションハッシュが与えられます。
|
セッションはリクエスト間での状態維持のために使用されます。セッションを有効化すると、ユーザセッションごとに一つのセッションハッシュが与えられます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
enable :sessions
|
enable :sessions
|
||||||
|
@ -1312,6 +1324,38 @@ foo.comのサブドメイン上のアプリ間でセッションを共有化し
|
||||||
set :sessions, :domain => '.foo.com'
|
set :sessions, :domain => '.foo.com'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### セッションミドルウェアの選択
|
||||||
|
|
||||||
|
`enable :sessions`とすることで、クッキー内の全てのデータを実際に保存してしまうことに注意してください。
|
||||||
|
これは、あなたが望む挙動ではない(例えば、大量のデータを保存することでトラフィックが増大してしまう)かもしれません。
|
||||||
|
あなたは、次のいずれかの方法によって、任意のRackセッションミドルウェアを使用することができます。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
enable :sessions
|
||||||
|
set :session_store, Rack::Session::Pool
|
||||||
|
```
|
||||||
|
|
||||||
|
オプションのハッシュを設定するためには、次のようにします。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
set :sessions, :expire_after => 2592000
|
||||||
|
set :session_store, Rack::Session::Pool
|
||||||
|
```
|
||||||
|
|
||||||
|
他の方法は`enable :sessions`を**しない**で、他のミドルウェアの選択と同様にあなた自身でミドルウェアを選択することです。
|
||||||
|
|
||||||
|
この方法を選択する場合は、セッションベースの保護は**デフォルトで有効にならない**ということに注意することが重要です。
|
||||||
|
|
||||||
|
これを満たすためのRackミドルウェアを追加することが必要になります。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
use Rack::Session::Pool, :expire_after => 2592000
|
||||||
|
use Rack::Protection::RemoteToken
|
||||||
|
use Rack::Protection::SessionHijacking
|
||||||
|
```
|
||||||
|
|
||||||
|
より詳しい情報は、「攻撃防御に対する設定」の項を参照してください。
|
||||||
|
|
||||||
### 停止(Halting)
|
### 停止(Halting)
|
||||||
|
|
||||||
フィルタまたはルーティング内で直ちにリクエストを止める場合
|
フィルタまたはルーティング内で直ちにリクエストを止める場合
|
||||||
|
@ -1369,7 +1413,8 @@ end
|
||||||
|
|
||||||
### 別ルーティングの誘発
|
### 別ルーティングの誘発
|
||||||
|
|
||||||
`pass`を使ってルーティングを飛ばすのではなく、他のルーティングを呼んだ結果を得たいというときがあります。これを実現するには`call`を使えばいいです。
|
`pass`を使ってルーティングを飛ばすのではなく、他のルーティングを呼んだ結果を得たいという場合があります。
|
||||||
|
これは`call`を使用することで実現できます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
get '/foo' do
|
get '/foo' do
|
||||||
|
@ -1382,12 +1427,11 @@ get '/bar' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
ノート: 先の例において、テストを楽にしパフォーマンスを改善するには、`"bar"`を単にヘルパーに移し、`/foo`および`/bar`から使えるようにするのがいいです。
|
ノート: 先の例において、テストを楽にしパフォーマンスを改善するには、`"bar"`を単にヘルパーに移し、`/foo`および`/bar`から使えるようにしたほうが良いです。
|
||||||
|
|
||||||
リクエストが、その複製物でない同じアプリケーションのインスタンスに送られるようにしたいときは、`call`に代えて`call!`を使ってください。
|
リクエストが、その複製物でない同じアプリケーションのインスタンスに送られるようにしたいときは、`call`に代えて`call!`を使ってください。
|
||||||
|
|
||||||
`call`についての詳細はRackの仕様書を参照してください。
|
`call`についての詳細はRackの仕様を参照してください。
|
||||||
|
|
||||||
|
|
||||||
### ボディ、ステータスコードおよびヘッダの設定
|
### ボディ、ステータスコードおよびヘッダの設定
|
||||||
|
|
||||||
|
@ -1476,7 +1520,6 @@ end
|
||||||
|
|
||||||
リクエストスコープにおいて、`logger`ヘルパーは`Logger`インスタンスを作り出します。
|
リクエストスコープにおいて、`logger`ヘルパーは`Logger`インスタンスを作り出します。
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
get '/' do
|
get '/' do
|
||||||
logger.info "loading data"
|
logger.info "loading data"
|
||||||
|
@ -1500,7 +1543,7 @@ end
|
||||||
|
|
||||||
### MIMEタイプ(Mime Types)
|
### MIMEタイプ(Mime Types)
|
||||||
|
|
||||||
`send_file`か静的ファイルを使う時、SinatraがMIMEタイプを理解できない場合があります。その時は `mime_type` を使ってファイル拡張子毎に登録して下さい。
|
`send_file`か静的ファイルを使う時、SinatraがMIMEタイプを理解できない場合があります。その時は `mime_type` を使ってファイル拡張子毎に登録してください。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
configure do
|
configure do
|
||||||
|
@ -1561,7 +1604,6 @@ end
|
||||||
|
|
||||||
redirectに引数を渡すには、それをクエリーに追加するか、
|
redirectに引数を渡すには、それをクエリーに追加するか、
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
redirect to('/bar?sum=42')
|
redirect to('/bar?sum=42')
|
||||||
```
|
```
|
||||||
|
@ -1629,7 +1671,6 @@ etag @article.sha1, :weak
|
||||||
|
|
||||||
これらのヘルパーは、キャッシングをしてくれませんが、必要な情報をキャッシュに与えてくれます。もし手早いリバースプロキシキャッシングの解決策をお探しなら、 [rack-cache](https://github.com/rtomayko/rack-cache)を試してください。
|
これらのヘルパーは、キャッシングをしてくれませんが、必要な情報をキャッシュに与えてくれます。もし手早いリバースプロキシキャッシングの解決策をお探しなら、 [rack-cache](https://github.com/rtomayko/rack-cache)を試してください。
|
||||||
|
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
require "rack/cache"
|
require "rack/cache"
|
||||||
require "sinatra"
|
require "sinatra"
|
||||||
|
@ -1706,7 +1747,6 @@ send_file 'foo.png', :type => :jpg
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
### リクエストオブジェクトへのアクセス
|
### リクエストオブジェクトへのアクセス
|
||||||
|
|
||||||
受信するリクエストオブジェクトは、`request`メソッドを通じてリクエストレベル(フィルタ、ルーティング、エラーハンドラ)からアクセスすることができます。
|
受信するリクエストオブジェクトは、`request`メソッドを通じてリクエストレベル(フィルタ、ルーティング、エラーハンドラ)からアクセスすることができます。
|
||||||
|
@ -1911,18 +1951,19 @@ end
|
||||||
|
|
||||||
### 攻撃防御に対する設定
|
### 攻撃防御に対する設定
|
||||||
|
|
||||||
Sinatraは、[Rack::Protection](https://github.com/sinatra/rack-protection#readme)を使って、アプリケーションを多発する日和見的攻撃から守っています。この挙動は簡単に無効化できます(これはアプリケーションを大量の脆弱性攻撃に晒すことになります)。
|
Sinatraは[Rack::Protection](https://github.com/sinatra/rack-protection#readme)を使用することで、アプリケーションを一般的な日和見的攻撃から守っています。これは簡単に無効化できます(が、アプリケーションに大量の一般的な脆弱性を埋め込むことになってしまいます)。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
disable :protection
|
disable :protection
|
||||||
```
|
```
|
||||||
|
|
||||||
単一の防御層を外すためには、`protection`をオプションハッシュにセットします。
|
ある1つの防御を無効にするには、`protection`にハッシュでオプションを指定します。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
set :protection, :except => :path_traversal
|
set :protection, :except => :path_traversal
|
||||||
```
|
```
|
||||||
また配列を渡して、複数の防御を無効にすることもできます。
|
|
||||||
|
配列を渡すことで、複数の防御を無効にすることもできます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
set :protection, :except => [:path_traversal, :session_hijacking]
|
set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
|
@ -2081,7 +2122,7 @@ set :protection, :session => true
|
||||||
|
|
||||||
## 環境設定(Environments)
|
## 環境設定(Environments)
|
||||||
|
|
||||||
3種類の既定環境、`"development"`、`"production"`および`"test"`があります。環境は、`APP_ENV`環境変数を通して設定できます。デフォルト値は、`"development"`です。`"development"`環境において、すべてのテンプレートは、各リクエスト間で再ロードされ、そして、特別の`not_found`および`error`ハンドラがブラウザにスタックトレースを表示します。`"production"`および`"test"`環境においては、テンプレートはデフォルトでキャッシュされます。
|
3種類の既定環境、`"development"`、`"production"`および`"test"`があります。環境は、`APP_ENV`環境変数を通して設定できます。デフォルト値は、`"development"`です。`"development"`環境において、すべてのテンプレートは、各リクエスト間で再ロードされ、そして、特別の`not_found`および`error`ハンドラがブラウザにスタックトレースを表示します。`"production"`および`"test"`環境においては、テンプレートはデフォルトでキャッシュされます。
|
||||||
|
|
||||||
異なる環境を走らせるには、`APP_ENV`環境変数を設定します。
|
異なる環境を走らせるには、`APP_ENV`環境変数を設定します。
|
||||||
|
|
||||||
|
@ -2117,7 +2158,14 @@ end
|
||||||
|
|
||||||
### エラー(Error)
|
### エラー(Error)
|
||||||
|
|
||||||
`error`ハンドラはルーティングブロックまたはフィルタ内で例外が発生したときはいつでも発動します。例外オブジェクトはRack変数`sinatra.error`から取得できます。
|
`error`ハンドラはルーティングブロックまたはフィルタ内で例外が発生したときはいつでも発動します。
|
||||||
|
しかし、環境設定がdevelopmentの場合は`:after_handler`を設定している場合のみ発動するようになります。
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
set :show_exceptions, :after_handler
|
||||||
|
```
|
||||||
|
|
||||||
|
例外オブジェクトはRack変数`sinatra.error`から取得できます。
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
error do
|
error do
|
||||||
|
@ -2169,7 +2217,6 @@ end
|
||||||
|
|
||||||
Sinatraを開発環境の下で実行している場合は、特別な`not_found`および`error`ハンドラが導入され、これは親切なスタックトレースと追加のデバッギング情報をブラウザに表示します。
|
Sinatraを開発環境の下で実行している場合は、特別な`not_found`および`error`ハンドラが導入され、これは親切なスタックトレースと追加のデバッギング情報をブラウザに表示します。
|
||||||
|
|
||||||
|
|
||||||
## Rackミドルウェア(Rack Middleware)
|
## Rackミドルウェア(Rack Middleware)
|
||||||
|
|
||||||
SinatraはRuby製Webフレームワークのミニマルな標準的インタフェースである[Rack](http://rack.github.io/)上に構築されています。アプリケーションデベロッパーにとってRackにおける最も興味深い機能は、「ミドルウェア(middleware)」をサポートしていることであり、これは、サーバとアプリケーションとの間に置かれ、HTTPリクエスト/レスポンスを監視および/または操作することで、各種の汎用的機能を提供するコンポーネントです。
|
SinatraはRuby製Webフレームワークのミニマルな標準的インタフェースである[Rack](http://rack.github.io/)上に構築されています。アプリケーションデベロッパーにとってRackにおける最も興味深い機能は、「ミドルウェア(middleware)」をサポートしていることであり、これは、サーバとアプリケーションとの間に置かれ、HTTPリクエスト/レスポンスを監視および/または操作することで、各種の汎用的機能を提供するコンポーネントです。
|
||||||
|
@ -2256,13 +2303,13 @@ class MyApp < Sinatra::Base
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
`Sinatra::Base`のサブクラスで利用できるメソッドは、トップレベルDSLで利用できるものと全く同じです。ほとんどのトップレベルで記述されたアプリは、以下の2点を修正することで`Sinatra::Base`コンポーネントに変えることができます。
|
`Sinatra::Base`のサブクラスで利用できるメソッドは、トップレベルDSLで利用できるものと全く同じです。ほとんどのトップレベルで記述されたアプリは、以下の2点を修正することで`Sinatra::Base`コンポーネントに変えることができます。
|
||||||
|
|
||||||
* `sinatra`の代わりに`sinatra/base`を読み込む
|
* `sinatra`の代わりに`sinatra/base`を読み込む
|
||||||
(そうしない場合、SinatraのDSLメソッドの全てがmainの名前空間にインポートされます)
|
(そうしない場合、SinatraのDSLメソッドの全てがmainの名前空間にインポートされます)
|
||||||
* ルーティング、エラーハンドラ、フィルタ、オプションを`Sinatra::Base`のサブクラスに書く
|
* ルーティング、エラーハンドラ、フィルタ、オプションを`Sinatra::Base`のサブクラスに書く
|
||||||
|
|
||||||
`Sinatra::Base`はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルトで無効になっています。利用可能なオプションとその挙動の詳細については[Configuring Settings](http://www.sinatrarb.com/configuration.html)(英語)をご覧下さい。
|
`Sinatra::Base`はまっさらです。ビルトインサーバを含む、ほとんどのオプションがデフォルトで無効になっています。利用可能なオプションとその挙動の詳細については[Configuring Settings](http://www.sinatrarb.com/configuration.html)(英語)をご覧ください。
|
||||||
|
|
||||||
もしもクラシックスタイルと同じような挙動のアプリケーションをトップレベルで定義させる必要があれば、`Sinatra::Application`をサブクラス化させてください。
|
もしもクラシックスタイルと同じような挙動のアプリケーションをトップレベルで定義させる必要があれば、`Sinatra::Application`をサブクラス化させてください。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue