mrubyのHTTP2サーバー(trusterd)をRack APIに対応させる その1
はじめに
この記事は、@kjunichiの2015年パーソナルアドベントカレンダーの16日目の記事です。
Rack APIとは
初めて知った書き方は以下
Proc.new do |env| [200, {"content-type" => "text/html; charset=utf-8"}, ["<html><body><h1>こんにちは</h1><p>libh2oでmruby動いたよ。</p></body></html>"]] end
ruby力低いから、違ってるかもだが、CGIの環境変数的なオブジェクトがハッシュ形式でブロックの引数で渡ってきて、 これを参照して、あれこれ処理して、配列を返す
参考資料
- http://www.rubydoc.info/github/rack/rack/master/file/SPEC
- https://github.com/tenderlove/the_metal/issues/5
- http://qiita.com/higuma/items/838f4f58bc4a0645950a
返却する配列の形式
[HTTPステータスコード,コンテントタイプ,コンテンツそのもの]
という理解
Trusterdでうごかしてみた
trusterd.conf.rbに以下の関数を追加。
def LibTrasterdRackApi(env,filename) f = File.open(filename, "r") script = f.read f.close #puts script p env ro = eval(script) #e={} ro.call(env) end
s.set_map_to_storage_cbに以下を追加
if s.request.uri =~ /rack\/(.*)/ s.set_content_cb { #puts "/rack/ start" + $1 + ".rb" response = LibTrasterdRackApi(s.request_headers.all, $1+".rb") p response #s.set_status response[0] response[2].each{|line| s.rputs line} s.rputs "rack end" } end
https://127.0.0.1/rack/tiny
で
Proc.new do |env| [200, {"content-type" => "text/html; charset=utf-8"}, ["<html><body><h1>こんにちは</h1><p>trusterdでRack APIのrubyスクリプトが動いたよ。</p></body></html>"]] end
が動いた
わかったこと
- envに渡すハッシュを実装する必要がありそう
- hibariはPOSTを扱えるが、これには、envのquery_stringにPOSTパラメータもセットする必要がありそう
追記
動かせた