セルフホスティングのSinatra on PicoRubyを実験的に手元で動かしている

このホームページの管理画面のバックエンドを、udzura/picoruby-sinatra-covers(PicoRuby上のSinatra)をもとに、自前ホストする形にして、実験的に手元で動かしています。udzuraさんプロダクトに頼りまくっています。いつもありがとうございます。

sinatra-coversはセルフホストするサーバーは今は未対応とのことで、セルフホスト対応のためのpicoruby-sinatra-self-hosted-serverという仕組みを用意しています。

picoruby-sinatra-self-hosted-serverの構成

udzura/picoruby-sinatra-covers への依存とともに、以下を組み合わせています。

  • picobrick: 開発用のHTTPサーバー。WEBrickインスパイア。
  • picoruby-rackup: https://github.com/udzura/mruby-rack と組み合わせて使って、picobrickはここへRackup::Handler::Picobrickを登録します
  • picoruby-securerandom: Sinatraがロード中にSecureRandom.hex(64)を呼ぶための対応です

ハックで回避していること

upstreamへのご相談ご提案までは進められず、以下のような回避をしています。

PicoRubyのPOSIX/hostビルドとpicoruby-sinatra-coversとで、superclass違いの LoadError 定義がでてて、TypeError: superclass mismatchが発生します。

そこで、Object.send(:remove_const, :LoadError) if Object.const_defined?(:LoadError)だけの一行gem(picoruby-loaderror-reset)を作り、mrbgemの依存順でpicoruby-sinatra-coversの直後・picoruby-requireの直前に差し込むという小技を入れています。