本記事はmod_mruby ngx_mruby advent calendar 2014 21日目の記事です。 機能20日目、私 @matsumotory による「mrubyのサーバアプリケーション組込みにおいて複数スクリプトでインタプリタを共有することのデメリットとその対策」でした。 9日のアドベントカレンダーでmod_mrubyインストール後入門という記事で、mod_mrubyでのRuby実装が裏ではApacheのモジュール実装とリンクしているという話を紹介しました。 で、同様にngx_mrubyでもインストール後入門の記事を書こうかと思ったのですが、ほとんどmod_mrubyの場合と同じ内容になってしまう可能性があったので、むしろ、mod_mrubyと決定的に違う所はどういう機能かを紹介しようと考えました。 そこで、今回はngx_mrubyの特徴的な機能である、nginx変数の扱いに
すいませんでした... 24日に登録したつもりでいました。この記事は mod_mruby・ngx_mruby Advent Calendar 2014 23日 の記事となります... 気を取り直して。 Dockerでビルド君を作ろう クリスマスなのでmod_mrubyをDockerでビルドします。ただビルドするだけでなく、バイナリを吐き出してみましょう。 公式をもとにこういうDockerfileを作る。 FROM ubuntu:trusty MAINTAINER Uchio KONDO <udzura@udzura.jp> ENV DEBIAN_FRONTEND noninteractive RUN apt-get -y update RUN apt-get -y install \ sudo git curl bison \ apache2 apache2-dev apache2-uti
mod_mruby ngx_mruby Advent Calendar 2014 の22日目(12/22)の投稿です。遅ればせながら申し訳ありません… はじめに 仕事上でのファイルのやり取りでdr○pb○xを使用していたのですが、たまに(というか頻繁に)気を付けてないと上限に簡単に引っかかっていました。 その時一時的に手元のnginxに設定をゴニョゴニョ手動で追加して対応したのですが、 十分複雑なダウンロードkeyを自動で決める BASIC認証をかける IP制限をかける 任意の頃合いに配布を取り下げる(時限取り下げ) というのを都度やっていくのはそこそこ面倒で、だけどアプリ化するまでもなく。ただサンプルとして「これngx_mrubyでやったら面白いかも」と、作ってみることにしました。 nginx側でアプリを書くのはどうなのか賛否あるかと思いますが、ここまで来たら一度突き抜けてしまえ!と思い
この記事は、mod_mruby ngx_mruby advent calendar 2014の最終日25日の記事になります。 24日は @cubicdaiya さんの「ngx_mrubyとngx_lua」でした。 無事カレンダーの全ての日程が埋まるような結果となり、非常にうれしいです。また、自分の作ったソフトウェアを使って色々工夫されているのをみて、非常にワクワクしながら全ての記事を読みました。とてもおもしろかったです。 というわけで今日は最後になるので、mod_mrubyとngx_mrubyの開発で感じていた事、そこからの次の一手として考えついた新しいソフトウェアを紹介したいと思います。 mod_mrubyとngx_mruby開発で感じていた事 これまでのHTTP/1系で実装されてきた代表的なWebサーバであるApacheやnginxはそれぞれ固有の静的な設定を記述する必要があり、Web
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? mrubyでコンパイラを作ってみたり、Rubyを書く以外の方法でmrubyのバイトコード列を書く場合、バイトコードの命令を知る必要があります。 バイトコード命令は単純そうで意外と奥が深いようです。ここではmrubyのJITを作成する経験で得たバイトコードの裏仕様を解説したいと思います。 命令の解説 OP_NOP 何もしない命令 これって実はcodegen.cで定義されている正規のコードジェネレータでは出てこないんですよね。でもバイトコードのパッチとかやりたいときはないと困る重要な命令です。 命令の仕様ではオペランドはないのですが、実際に
2015/9/18 追記 以下の方法はh2oがmrubyをバンドルするようになって使えません。 代わりにpure ruby(mruby)のみのmrbgemsならdeps配下に置くだけでOkです。 libmruby.pcファイルを作る 例えば、mruby-mrmagick組み込んだmrubyを使いたい場合。 予め、mruby-mrmagickを組み込んだmrubyを用意しておきます。 その後、以下の作業でh2oにそのmrubyを組み込めます。 以下の.pcファイルを用意する prefix=/Users/kjunichi/local/src/mruby exec_prefix=${prefix} libdir=${exec_prefix}/build/host/lib/ includedir=${prefix}/include Name: MRUBY-libmruby Description:
About reserved postingIf you register a secret article by the day before the same day, it will be automatically published around 7:00 on the same day. About posting periodOnly articles submitted after the opening date of the year can be registered. (Secret articles can be registered anytime articles are posted.)
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? mrubyを改造したり、mrubyを何かアプリケーションとかに組み込むときに必ず必要になる物に、mrb_state型の構造体へのポインタ(多くの場合はmrbという名前で参照されている)があります。これは、mrubyで使う大域変数や状態を1つの構造体にまとめた物です。 mrubyのインタプリタを使うときにはmrb_state型の構造体のインスタンスを用意してそれをインタプリタに渡します。複数のインタプリタが欲しいときには複数のインスタンスを用意します。 こうすることで、構造体のインスタンスを複数用意することで複数のmrubyインタプリター
Rubyはメソッドの再定義が出来るのですが、これがJITコンパイラを作るときに問題になります。メソッドそのものを再定義しなければならないのはもちろん、各所に散らばっているそのメソッドを呼び出している元も書き換えなければならないからです。さもなければ、再定義されているかを毎回チェックする必要があり、大幅に速度が落ちます。 mrubyのJITではコードの自己書き換えを駆使することで速度を落とさず再定義に対処しています。ただし、メモリ効率が悪いので、頻繁な書き換えには向きません。 mrubyのJITではこんな感じで生成コードを管理しています。この場合は、メソッドfooの場合です。 entry tableってのがあって、RITE VMの命令毎に対応する機械語コードのアドレスが入っています。Tracing JITなのでプログラムが全て機械語になっている保証はないですので、これを見て対応する機械語命令
docker-compose で Rails の開発環境を作る docker-compose (fig) を利用して Rails の開発環境を作ってみます。個人的には Docker を本番環境で運用するのはまだちょっと怖いなーという感じなのですが、開発環境やテスト環境でならもう全然使えるレベルかなと思います。例として Rails 4.2 + PostgreSQL 9.4 の環境セットアップ。Docker の基本的な操作はひととおり抑えているものとします。 Docker, Rails, & Docker Compose together in your development workflow こちらの記事を参考にしてます。 Sample rails project on docker この記事で作ったプロジェクトはこっち。 コンテナ戦略 原則 1 Container 1 Service に
はじめに WEBアプリケーションの中で、検索機能を付けたくなることありますよね。 普通に考えたら、検索エンジン用のサーバーを構築して、そこに solr なり elasticsearch なりを入れて、Rails から httpリクエストを飛ばして・・・ってやれば良いと思うんですが、Rails のモデルと elasticsearch のドキュメントの対応関係を考えたり、 その周りの設計をしたりと結構手間がかかります。 うーん、もっとこう、モデルとドキュメントが一対一くらいの感じで対応してくれて、使いやすいやつないかなぁー というわけで、こちらの gem の検証です。 elasticsearch-rails よく見たら elasticsearch の公式リポジトリでしたね。 elasticsearch は公式サイトからダウンロードしてきて、適当に設定しておいてください。この記事では説明しません
iOS でプッシュ通知通知をする場合、プッシュ通知用の証明書を作る必要があります。 恐らく最終的に hogehoge.p12という拡張子のファイルを作ることが多いと思います。 しかし、その証明書の作成方法はブラウザや mac の キーチェーンアクセス を行ったり来たりする必要があるので非常に面倒です。 具体的にはここにあるような手順を踏む必要があります 更にこの作業はリンク先にあるように証明書の期限が1年で切れるため毎年やる必要があります。 1年後だと確実に忘れていそうですよね。また、手順が複雑すぎて最初の1回目も手間取ると思います。 そこで今回はそんな面倒な手順をコマンド一発で終わらせる fastlane の pem を紹介したいと思います。 インストール お手持ちの環境で gem install pem とやるとインストールできます。 README.md もご確認ください。 証明書の作
accepts_nested_attributes_for ひとつのフォームの中で、associationで関連づいた子レコードまで保存させたいときにaccepts_nested_attributes_forは非常に便利です。 以前、以下のようにまとめました。 Rails ネストした関連先のテーブルもまとめて保存する (accepts_nested_attributes_for、fields_for) ただし、子レコードの更新(削除)や、子レコードの数の変更まで行いたかったのでやり方をまとめておきます。(メモ程度なので詳しくは説明書きませんでしたが、参考になれば。) 以下の解説でnew(create)とedit(update)のみにフォーカスして説明します。 簡単なCRUDを作ったrepositoryを用意してありますので、もし詳細が気になった方は参照されて下さい。 https://git
備考 ecto_migrate ridgepoleと同様に、マイグレーションファイルを生成する必要がないのでその点は便利です。(自動的にALTER文を生成してくれる) フィールドの型(string等)を変更しないと、フィールドのサイズ変更が行えないようです。(ここがかなり不便) iexから実行する場合(EctoItを使用する場合)、MySQLではrootユーザのパスワードを空にしておく必要があります。 現時点の最新バージョン(0.6.3)がectoのバージョン1.0.xに依存しています(ectoの最新バージョンは1.1.3なので古いectoを使用する必要があります。ここもちょっと問題) 結論として、現時点ではectoの通常のmigrate機能を使用しておいた方が良いと思われます。 (2016/02/23追記) ectoの通常のmigrate機能を使う場合、スキーマ変更時にマイグレーションフ
#コード コード一式は https://github.com/c9katayama/aws-lambda-jruby にあります。 #使い方 githubからclone後、src/main/resources/main.rb にrubyコードを書きます。同ディレクトリ内のファイルは全てLambdaにデプロイされるため、必要なファイルはこのディレクトリに置きます。 stdlibは、JRubyに付属の標準ライブラリが入っています。このディレクトリはaddLibPathでパスが通っているので、ここに入っているrbファイルは とするとmain.rbから使用することができます。 ##開発 rubyファイル作成時にローカルでテストしたい場合は、 src/test/java/AWSLambdaJRubyTestMain を実行します。 AWSLambdaJRubyは、Lambdaで受け取ったパラメータを
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く