Merge pull request #1629 from rkmathi/rkmathi/update-readme-ja

Update README.ja.md to follow #1627
This commit is contained in:
namusyaka 2020-11-05 20:56:00 +09:00 committed by GitHub
commit 91f15007d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 61 additions and 31 deletions

View File

@ -28,7 +28,10 @@ ruby myapp.rb
[http://localhost:4567](http://localhost:4567) を開きます。
ThinがあればSinatraはこれを利用するので、`gem install thin`することをお薦めします。
コードを変更しても、サーバを再起動しないと変更が有効になりません。
コードを変更するたびにサーバを再起動するか、[sinatra/reloader](http://www.sinatrarb.com/contrib/reloader)を使ってください。
PumaがあればSinatraはこれを利用するので、`gem install puma`することをお薦めします。
## 目次
@ -747,7 +750,7 @@ erb :overview, :locals => { :text => textile(:introduction) }
%p= textile(:greetings)
```
TexttileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。
TextileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。
#### RDoc テンプレート
@ -1482,37 +1485,55 @@ end
これはストリーミングAPI、[Server Sent Events](https://w3c.github.io/eventsource/)の実装を可能にし、[WebSockets](https://en.wikipedia.org/wiki/WebSocket)の土台に使うことができます。また、一部のコンテンツが遅いリソースに依存しているときに、スループットを上げるために使うこともできます。
ノート: ストリーミングの挙動、特に並行リクエスト(cuncurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。いくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。
ノート: ストリーミングの挙動、特に並行リクエスト(concurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。いくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。
オプション引数が`keep_open`にセットされている場合、ストリームオブジェクト上で`close`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはThinやRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。
オプション引数が`keep_open`にセットされている場合、ストリームオブジェクト上で`close`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。
```ruby
# ロングポーリング
# config.ru
require 'sinatra/base'
set :server, :thin
connections = []
class App < Sinatra::Base
connections = []
get '/subscribe' do
# サーバイベントにおけるクライアントの関心を登録
stream(:keep_open) do |out|
connections << out
# 死んでいるコネクションを排除
connections.reject!(&:closed?)
get '/subscribe' do
# register a client's interest in server events
# サーバイベントにおけるクライアントの関心を登録
stream(:keep_open) do |out|
connections << out
# 死んでいるコネクションを排除
connections.reject!(&:closed?)
end
end
post '/:message' do
connections.each do |out|
# クライアントへ新規メッセージ到着の通知
out << params['message'] << "\n"
# クライアントへの再接続の指示
out.close
end
# 肯定応答
"message received"
end
end
post '/message' do
connections.each do |out|
# クライアントへ新規メッセージ到着の通知
out << params['message'] << "\n"
run App
```
# クライアントへの再接続の指示
out.close
end
# 肯定応答
"message received"
```ruby
# rainbows.conf
Rainbows! do
use :EventMachine
end
````
次のように起動します。
```shell
rainbows -c rainbows.conf
```
クライアントはソケットに書き込もうとしている接続を閉じることも可能です。そのため、記述しようとする前に`out.closed?`をチェックすることを勧めます。
@ -2107,7 +2128,7 @@ set :protection, :session => true
<dt>threaded</dt>
<dd>
<tt>true</tt>に設定されているときは、Thinにリクエストを処理するために<tt>EventMachine.defer</tt>を使うことを通知する。
<tt>true</tt>に設定されているときは、サーバにリクエストを処理するために<tt>EventMachine.defer</tt>を使うことを通知する。
</dd>
<dt>views</dt>
@ -2631,7 +2652,7 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
-p # ポート指定(デフォルトは4567)
-o # ホスト指定(デフォルトは0.0.0.0)
-e # 環境を指定 (デフォルトはdevelopment)
-s # rackserver/handlerを指定 (デフォルトはthin)
-s # rackserver/handlerを指定 (デフォルトはpuma)
-x # mutex lockを付ける (デフォルトはoff)
```
@ -2640,13 +2661,13 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
_この[StackOverflow](https://stackoverflow.com/a/6282999/5245129)
のKonstantinによる回答を言い換えています。_
Sinatraでは同時実行モデルを負わせることはできませんが、根本的な部分であるThinやPuma、WebrickのようなRackハンドラ(サーバー)部分に委ねることができます。
Sinatraでは同時実行モデルを負わせることはできませんが、根本的な部分であるやPuma、WEBrickのようなRackハンドラ(サーバー)部分に委ねることができます。
Sinatra自身はスレッドセーフであり、もしRackハンドラが同時実行モデルのスレッドを使用していても問題はありません。
つまり、これはサーバーを起動させる時、特定のRackハンドラに対して正しい起動処理を特定することが出来ます。
この例はThinサーバーをマルチスレッドで起動する方法のデモです。
この例はRainbowsサーバーをマルチスレッドで起動する方法のデモです。
```ruby
# app.rb
# config.ru
require 'sinatra/base'
@ -2656,13 +2677,22 @@ class App < Sinatra::Base
end
end
App.run!
run App
```
サーバーを開始するコマンドです。
```ruby
# rainbows.conf
# RainbowsのコンフィギュレータはUnicornのものをベースにしています。
Rainbows! do
use :ThreadSpawn
end
```
次のようなコマンドでサーバを起動します。
```
thin --threaded start
rainbows -c rainbows.conf
```
## 必要環境