大瀧隆太(430)1302130件のシェア(ちょっぴり話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。httpd(以下Apache)によるバーチャルホストの構築例として、mod_mruby編をお送りします。Apacheの再起動が不要なバーチャルホストの構築方法として、前回はmod_vhost_aliasモジュールの活用とmod_luaモジュールでLuaスクリプトによるApacheの動作のカスタマイズをご紹介しました。今回は、mod_luaモジュールと同様のアプローチで軽量版Ruby実装のmrubyを実行する、mod_mrubyモジュールでApacheの動作をカスタマイズ、バーチャルホスト構成として動かしてみようと思います。Ryosukeさんのツイートでありました。以下の説明はちょっと情報が古いことをご承知置きください。ここで言及されていた、document_rootの設定、エラー行の表示、エラーログの分離、あたりはできるようにしました。Ryosukeさんが開発する、Webサーバー拡張としてmrubyを実行するソフトウェアです。matsumoto-rmruby自体が新しい実装なのでまだ開発途上のものですが、ChefやCapistranoなどでRubyを触ったことのある方であれば、Luaよりも馴染みやすいと思います。キャッシュ機構やチューニングが固まっていけばLua/mod_luaモジュールを凌ぐパフォーマンスを発揮する仕組みになるかもしれません。パフォーマンスを求める要件であればApache自体を捨てNginxを選択することが根本的なパフォーマンスアップに繋がると思うので、Apache+mod_mruby/mod_luaの構成は"従来のWebサーバーの構成+αで手軽にApacheの挙動を拡張する手段"というようなニーズにマッチする感じがします。mod_mrubyのインストール動作確認した環境は、前回のエントリーのmod_luaのものと同様です。useの手順に沿ってインストールしましたが、いくつか依存するコンポーネントがあるので、先にインストールしておきます。hiredis-develあとは、ApacheエクステンションをビルドするapxsコマンドがあればOKです。Buildというmod_mrubyに同梱されるシェルスクリプトでまとめてビルドしました。installの処理の中で、/usr/local/apache2/conf/httpd.confファイルの既存のLoadModuleディレクティブの末尾に、自動で追加されます。基本的な設定は、mod_luaとほとんど変わりません。httpd.confないしconf/*.confファイル内にmruby*ディレクティブを追加してフックするタイミングと対応するmrubyスクリプトを定義、mrubyスクリプトにカスタマイズするコードを記述します。mod_luaではハンドラ関数を定義していましたが、mod_mrubyではmrubyスクリプトがそのまま実行されます。granted</Directory>ディレクティブにはそれぞれのフックするタイミングごとに*First/*Middle/*Lastが用意されており、mod_luaよりもフックするタイミングを細かく制御できるようです。複数のmrubyスクリプトでフックするときに利用しそうな感じがします。今回はタイミングには特にこだわらないので、*Middleを使いました。Pagesにあります。Wikimrubyスクリプトの記述例(バーチャルホストの実装)mod_luaと同等の処理を目指しました。以下の設定でバーチャルホストを実装してみます。/usr/local/apache2/vhosts/<ドメイン名>/logs/mod_mrubyでは、Apacheクラスのクラスメソッドでリクエスト情報の参照やApacheの挙動を制御します。Apache::return(Apache::DECLINED)endmod_luaにあったset_document_rootメソッドがmod_mrubyには無いようなので、リクエストのパス名(r.uri)とバーチャルホストのドキュメントルートを結合、レスポンスとなるファイル名を生成、Apache::OKで処理を終了しています。methodになってしまいました。思わぬところで、CRubyとmrubyの違いを実感できました(苦笑)。エラーログの取り方もmod_lua同様見つけられず。エラーログはあまりフックするニーズがないのでしょうか...。restartでApacheを再起動すればOKです。アクセスログは以下のような感じで出ます。前回ご紹介したmod_luaモジュールとの"手触り感"で比べると、スクリプトを書く感触はRubyを触ったことがあるのでmod_mrubyの方が良いですね。Buildを用いてインストールしたためか、mod_mrubyをビルドするために必要なコンポーネント(CRubyやbisonなど)が多かったのはちょっと残念です。mod_luaモジュールであれば、既にApacheのソースにバンドルされており最低限のソフトウェアで済み、かつApache標準のインストール手順を踏むことができるので、上述した"従来のWebサーバーの構成+αで手軽にApcheの挙動を拡張する手段"というニーズを満たせると思います。mod_mrubyモジュールの動作要件は今後の開発が進むにつれ変わっていくところだと思うので、現時点での話です。あと、mod_mrubyではエラーログにエラーが発生したスクリプトの行を出してくれないのが、地味にしんどいです...。まとめmod_luaモジュールと同等の機能をmod_mrubyで実装してみました。4,309,658ゲストブロガーです。株式会社ソラコムでソリューションアーキテクトやってます。クラウドの自動化やIoT周りについての記事を書きます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。和樹25こんにちは植木和樹@上越オフィスです。Terminalの機能確定版がリリースされたので試してみました。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。川原征大4形態素解析の入門中で、ブログの内容の分析を試しています。作業効率化をしたという話。夏目祐樹395こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介255SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健233こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。