このホームページの管理画面のバックエンドを、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の直前に差し込むという小技を入れています。