2012年 1月 22日 はてなブックマーク -
タグ: #MySQL #fluentd #ruby

MySQLのslow query logのためのfluentdのinput pluginを作った

Fluent input plugin for MySQL slow query log format. — Gist

本家のドキュメントにin_tailプラグインを拡張してオリジナルのプラグインを作る方法が載っていたので、それを応用してMySQLのslow query logを送るプラグインを作った。

slow query logは個々のレコードが複数行にまたがるため、一行単位での処理しかできないin_tailは使えなかった。
余談:fluentd自体について

筋がとても良いなーと使っていて本当に思う。

単にログを集めるだけのソフトウェアなんだけど、コミュニティも活発だし、やっぱりRubyで書かれているというのが大きいのかな。
余談2:to_msgpackがないと怒られるエラーに苦しんだ

in_tailのparse_lineの返り値が time と record の配列な訳だけど、timeはTImeインスタンスじゃなく、Integerじゃないといけないという内部仕様があって、それに気が付かずにTimeインスタンスを返して to_msgpack なんていうメソッドはありません、とfluentの内部の方でエラーが発生して怒られた。

スレッドが走っていて、僕はあまりマルチスレッド環境でのデバッグ経験が無かったので、一体どこでバグが発生しているのか突き止めるのに結構苦労した。結局、to_iをつけるだけで解決したのだけど。

return する前にto_i を忘れないようにしましょう。

MySQLのslow query logのためのfluentdのinput pluginを作った - SELECT * FROM life;

1ヶ月前 | | 2012年 1月 22日 | このエントリーを含むはてなブックマーク
2011年 11月 12日 はてなブックマーク -
タグ: #rails #heroku #ruby

MOGOKとは?

MOGOKは、Ruby on Railsアプリケーションの開発支援環境と実行環境を提供するサービスです。

MOGOKの思想

MOGOKは「コンピュータに使われる人」ではなく「コンピュータを使う人」でありたいと願う
すべてのRubyプログラマを支援します。

コンピュータは人を幸せにするために生まれました。しかし、私たちソフトウェアエンジニアは、日々コンピュータに苦しめられています。
何かある目的に向かって進もうとするたび、私たちはどれだけ同じ作業を繰り返してきたことでしょう。 MOGOKは、そんなソフトウェアエンジニアをルーティンワークの牢獄から開放したいという切なる願いをもって開発されました。

MOGOKの特徴

クリックしてすぐ使えるRails環境

オンラインサインアップ後、クリック数回でRuby on Rails環境をご利用いただけます。

無料でスタート可能

プロセス数、メモリ容量、データベース容量等の追加リソースは、有料サービスとしてご提供予定です。

クラウド時代の分散アーキテクチャ

物理的な機器やサーバインスタンスをお客様が意識する必要はありません。
すべての構成要素が冗長化されており、システムのダウンタイムを極小化できます。

充実の日本語ドキュメント・安心の日本語サポート

Ruby on Railsに関する最新の日本語ドキュメントをオンラインでご提供します。
インシデントチケットによる日本語サポートを有料サービスとしてご提供予定です。

Rubyアソシエーション認定PaaS

Rubyアソシエーション認定PaaSの取得を目指しています。

ご利用の前提

MOGOKは以下のソフトウェアに関する知識をお持ちの方を対象としています。

  • Ruby on Rails
  • Git
  • MySQL

MOGOK|MOGOKとは?

国産Herokuがそろそろリリースされます。


3ヶ月前 | | 2011年 11月 12日 | このエントリーを含むはてなブックマーク
2011年 5月 28日 はてなブックマーク -
タグ: #Ruby

テスト1+による連結0.306s
テスト2個別にconcat0.315s
テスト3式展開0.218s
テスト4配列のjoin0.333s

テスト3が飛び抜けて速い結果となりました。

結論は変数を含む複数の文字列の結合に関しては式展開を使うのがよいです。

文字列の連結、その2 - ぞえ の戯れ言

Rubyにおいて、変数を含む3つの文字列を連結する場合はどの方法がよいのか調べてみたという話です。


9ヶ月前 | | 2011年 5月 28日 | このエントリーを含むはてなブックマーク
2011年 5月 22日 はてなブックマーク -
タグ: #Linux #CentOS #Ruby

Rubyのソースコードをrpmパッケージにする

目的

  • rpmでrubyを管理したい
  • かつ、rubyの最新をrpmで管理したい
  • 新しくspecファイルを作れない(作るのが面倒だ)
  • 面倒なので、すでにrpmになっている物のspecファイルを流用して最新のrpmファイルを作っちゃおう

必要なもの

手順

  • rpmbuild インストール
    yum -y install rpmbuild
    
  • rpm-build用の作業フォルダを作成
    rmkdir ~/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
    
  • 現在srpmになっている古いソースファイルを、rpmbuildの作業フォルダ「SRPMS」にコピー
    cp ruby-1.8.6.287-2.fc9.src.rpm ~/rpm/SRPMS
    
  • 古いソースファイルをrpmbuildの作業フォルダに展開
    cd ~/rpm
    rpm -i SRPMS/ruby-1.8.6.287-2.fc9.src.rpm
    
  • ruby.specファイルの修正
    ~/rpm/SPECSにruby.specファイルを編集する
    • rubyverを1.8.7に修正
    • _patchlevelを174に修正
    • Source0: のファイル名を、ruby-1.8.7-p174.tar.gzに修正
    • patch??という定義を削除
    • %setupの直後くらいにあるPatch??というものをすべて削除
      新しい1.8.7のソースを使うので、1.8.6用のパッチはいらないため
  • rpm作成
    cd ~/rpm
    rpmbuild -bb SPECS/ruby.spec
    
  • rpm完成
    ~/rpm/RPMSフォルダの中に完成したものがあるはず
  • rpmファイルのインストール
    cd ~/rpm/RPMS/i386
    rpm -ivh *.rpm
    

Linux関連情報 - Rubyのソースコードをrpmパッケージにする - gendosuの企画開発室

9ヶ月前 | | 2011年 5月 22日 | このエントリーを含むはてなブックマーク
2011年 5月 14日 はてなブックマーク -
タグ: #ruby #CentOS #Linux

ubyのインストール

本手順ではPassengerの開発元であるPhusionが開発しているRuby Enterprise Editionをインストールします。

Ruby Enterprise EditionはRuby 1.8.7をベースに変更を加えたもので、オリジナルのRubyと比較すると、Passenger上でRuby on Railsアプリケーションを実行する際にメモリ使用量を減らせるというメリットがあります。

1. Ruby Enterprise Editionのダウンロード

http://www.rubyenterpriseedition.com/download.html

2. インストーラ実行

ダウンロードしたtarballを展開して installer を実行します。以下のコマンド例においてinstallerが格納されているディレクトリはRuby Enterprise Editionのバージョンによって変わります。適宜読み替えて実行してください。

# ./ruby-enterprise-1.8.7-2011.03/installer --dont-install-useful-gems --no-dev-docs

インストーラーオプション:

--dont-install-useful-gems 後の手順でRedmineに必要なgemパッケージを手動でインストールするのでここではインストールしません
--no-dev-docs 不要なので開発者向けドキュメントをインストールしません

インストーラを実行すると、Ruby Enterprise Editionをビルドするのに必要なソフトウェアがOSにインストールされているか確認が行われます。不足しているものがあるとエラーが表示され先に進 めません。前述の「必要なパッケージのインストール」を実行していれば、エラーが発生することなく先に進めるはずです。

Checking for required software...

 * C compiler... found at /usr/bin/gcc
 * C++ compiler... found at /usr/bin/g++
 * The 'make' tool... found at /usr/bin/make
 * The 'patch' tool... found at /usr/bin/patch
 * Zlib development headers... found
 * OpenSSL development headers... found
 * GNU Readline development headers... found

依存するソフトウェアのチェックが終わると、インストール先(Target Directory)の入力を求められます。デフォルトのインストール先は”/opt/ruby-enterprise-1.8.7-2011.03 /“などですが、”/usr/local/”と入力すれば、オリジナルのRubyをビルドしたときと同様に/usr/local/以下にインストールされ ます。

Target directory

Where would you like to install Ruby Enterprise Edition to?
(All Ruby Enterprise Edition files will be put inside that directory.)

[/opt/ruby-enterprise-1.8.7-2011.03] : /usr/local/

Redmine 1.1をCentOS5.5にインストールする手順 | Redmine.JP Blog

Ruby-Enterprizeはお勧めです。


9ヶ月前 | | 2011年 5月 14日 | このエントリーを含むはてなブックマーク
2011年 4月 30日 はてなブックマーク -
ちょっとしたコードを試すならやっぱり『Codepad』が便利だなぁ | IDEA*IDEA

様々なプログラミング言語の実行結果をブラウザ上で確認できるサイトです。
もちろん使えない命令なんかもあるのですが、ブラウザでワンクリックで使えるというのは便利ですね。

» codepad
http://codepad.org/

対応言語:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl

ちょっとしたコードを試すならやっぱり『Codepad』が便利だなぁ | IDEA*IDEA

様々なプログラミング言語の実行結果をブラウザ上で確認できるサイトです。
もちろん使えない命令なんかもあるのですが、ブラウザでワンクリックで使えるというのは便利ですね。

» codepad
http://codepad.org/

対応言語:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl

9ヶ月前 | | 2011年 4月 30日 | このエントリーを含むはてなブックマーク
2011年 2月 7日 はてなブックマーク -
タグ: #ruby #python #perl #curl

取得対象はlocalhostのfaivcon画像、サーバーはnginxで十分速い。3638bytes。

$ time ruby ruby.rb
real    0m0.512s
user    0m0.247s
sys     0m0.123s

$ time python python.py
real    0m0.908s
user    0m0.216s
sys     0m0.072s

$ time perl lwp.pl
real    0m0.591s
user    0m0.400s
sys     0m0.028s

$ time perl curl_easy.pl
real    0m0.087s
user    0m0.052s
sys     0m0.025s

考察

100リクエストで350KB程度転送するのにLL付属の標準的なHTTPクライアントだと500-1000msぐらいかかるようだ。curl使うと100ms以下で終わる。

LLごとの標準的なHTTPクライアントで100リクエスト投げた時のベンチマーク - 金利0無利息キャッシング – キャッシングできます - subtech

curl速い。


1年前 | | 2011年 2月 7日 | このエントリーを含むはてなブックマーク
2011年 1月 29日 はてなブックマーク -
タグ: #ruby #redmine #API

コマンドラインでメール投稿してチケット登録するツールを作ってたんですが、登録されるタイミングとか微妙でどうも使いづらかった。

会社のRedmineが1.1に上がったので調べてたらREST APIを見つけて、そっちに乗り換え。

どうせなら公開しようと思って、昨日夜なべして作り上げました。

 

authorNari/redcuine - GitHub

gem install redcuine

で入ると思います。

ドキュメントとかほぼないし、テストもないので(酷い)、使う人はexperimentalだと思って使ってください。

 

Issueの取得、登録、更新、削除と一通りできます。

Redmine1.1でしか試してないので、1.0系だと動かないかも。

Redmineのチケットをコマンドラインで扱う「redcuine」 - I am Cruby!

1年前 | | 2011年 1月 29日 | このエントリーを含むはてなブックマーク
2011年 1月 23日 はてなブックマーク -
タグ: #ruby #redmine

CORESERVER.JPさんのCORE-BプランでRedmine

Posted on 12月 27th, 2009 by admin

CORESERVER.JPさんの「CORE-Bプラン」でサブドメイン( redmine.coresv.net )を取得して、プロジェクト管理ソフトウェア「Redmine」をインストールしました。

RubyGemsのインストール

まず最初に、下記の参考サイトさんを参照しながらRubyForegeよりRubyGemsをダウンロードして、インストールしました。

参考サイトさ んでは、サブフォルダにインストールされていましたが、当サイトでのインストール場所は、「–prefix=$HOME」として、自分のアカウントのルー トにしました。インストール後に確認したところ、「/virtual/(自分のアカウント)/bin/」にgemの実行プログラムがインストールされ、 「/virtual/(自分のアカウント)/lib/」以下に各種フルだが作成され、ライブラリーがインストールされていました。

CORESERVER.JPさんのCORE-BプランでRedmine | Oh!Happy.ORG Blog

試しに行おうとしたら、railsのインストール時に負荷が高いために何度も強制終了され結局あきらめました。


1年前 | | 2011年 1月 23日 | このエントリーを含むはてなブックマーク
2011年 1月 23日 はてなブックマーク -
タグ: #ruby

Ruby 1.8.5 に対応した最新の RubyGems は 1.3.5

RubyGems 1.3.6 以上だと Ruby 1.8.6 を要求するよ。

CentOS 5 な環境に yum で入る Ruby1.8.5 だから、RubyGems も 1.3.5 以下ってことになるね。

Ruby 1.8.5 に対応した最新の RubyGems は 1.3.5 - 昨日知ったこと

1年前 | | 2011年 1月 23日 | このエントリーを含むはてなブックマーク
2010年 11月 4日 はてなブックマーク -
タグ: #Linux #CentOS #ruby

ソースを落としてコンパイル

ここは前回と一緒です

$ cd /usr/lcoal/src
$ sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p0.tar.gz
$ sudo tar xvzf ruby-1.9.2-p0.tar.gz
$ cd ruby-1.9.2-p0
$ sudo ./configure
$ sudo make

ここは何事も無く完了しました。

RPMパッケージの作成

$ sudo /usr/local/sbin/checkinstall --fstrans=no

だいたいの質問はそのままEnterを押しますが、↓の質問は「R」と答えます。

Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? R

ここで問題発生。↓のメッセージから先に進まなくなります。

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them?  [n]: 
それらをパッケージから除外しますか?(yesと答えることをおすすめします) [y]: 

tempディレクトリにファイルをコピー..

もう1度checkinstallからやり直し、最後の質問を「n」と答えてみます。

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them?  [n]: 
それらをパッケージから除外しますか?(yesと答えることをおすすめします) [y]: n

tempディレクトリにファイルをコピー..OK

よし、通った!んで最後に、

**********************************************************************

 Done. The new package has been saved to

 /usr/src/redhat/RPMS/x86_64/ruby-1.9.2-p0-1.x86_64.rpm
 You can install it in your system anytime using: 

      rpm -i ruby-1.9.2-p0-1.x86_64.rpm

**********************************************************************

と表示されたのでOK!

インストール

RPMパッケージをインストールします。rpmのパスはcheckinstallで最後に出力されてます。

$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.9.2-p0-1.x86_64.rpm 
エラー: 依存性の欠如:
        /usr/local/bin/ruby は ruby-1.9.2-p0-1.x86_64 に必要とされています

こちらに同じエラーが載っていたので、オプションを追加して再実行。

$ sudo rpm -ivh --nodeps --nomd5 /usr/src/redhat/RPMS/x86_64/ruby-1.9.2-p0-1.x86_64.rpm
準備中...                ########################################### [100%]
   1:ruby-1.9.2             ########################################### [100%]

成功。インストールされたかの確認。

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

インストール完了です。

RubyGemsの動作確認

rubyを1.9.2にあげたらgemでエラーが出るようになった。 - 俺の作業ログ

↑こちらではgemがうまく動かず困ったわけですが、gemを実行してみると、

$ gem -v
1.3.7

おおお!正常に動いてるー!!!よかったー!!!!!

まとめ

CentOS5.5にRuby1.9.2をインストールするには「make install」 ではなく「checkinstall」を使ってRPMインストールすべし!

ruby1.9.2のインストール 再挑戦(CentOS5.5) - 俺の作業ログ

1年前 | | 2010年 11月 4日 | このエントリーを含むはてなブックマーク
2010年 10月 19日 はてなブックマーク -
タグ: #Ruby #mod_passenger

How do I upgrade to 3.0.0?

Via a gem

First install the gem with the following command:

gem install passenger

If you’re using Phusion Passenger for Apache or for Nginx, then re-run the Apache or Nginx module installer, whichever is appropriate:

passenger-install-apache2-module
passenger-install-nginx-module

At the end the installer will tell you to paste a configuration snippet into your web server config file. Replace the old snippet that you already had with this new one.

Phusion Passenger Standalone users don’t need to run anything else. Whenever you type

passenger start

it will automatically upgrade itself.

Phusion Passenger 3.0.0 final released – Phusion Corporate Blog

Passenger3がでました。
高速になったのはもちろん、安定性も良いそうで期待できます。


1年前 | | 2010年 10月 19日 | このエントリーを含むはてなブックマーク
2010年 10月 18日 はてなブックマーク -
タグ: #Ruby #mod_passenger

FastCGI vs mod_passenger

結論から。

比較対象FastCGImod_passenger
速度(req/sec)*1900前後1100前後
開発の楽さ基本的に CGI で開発し FastCGI へ移行。*2
FastCGI の時は error_log を見ないとエラーがわからないのが面倒。
どのようなエラーが出たのかすべて表示される。
mod_passenger 上ですべて開発することも可能
リロード基本的には自動リロードだが、たまにおかしくなると、FastCGI のプロセスを殺したり Apache を再起動したり自動リロードはしない。/apppath/tmp/restart.txt を置くとリロード。または Apache 再起動
Rack との親和性基本Handler。スマートにミドルウェアが使えないRackup が基本で Rack の全機能が自由自在に使える。ソースも一度書いたらALL OK!

mod_passenger 便利すぎる。

Apache2 + Ruby + Rack + mod_passenger (1) - 今日調べたことまとめ

/apppath/tmp/restart.txt を置くとリロードするのか。知らなかった!


1年前 | | 2010年 10月 18日 | このエントリーを含むはてなブックマーク
2010年 8月 21日 はてなブックマーク -

プログラミング言語(C#,VB,PHP,C/C++,Python,Java,Ruby,JavaScript,Objective-C)やHTMLのコーディングスタンダードを集めたリストを発見しました。日本語訳があるものはできるかぎり探し出して,括弧のなかに併記して補ってあります。微妙に古いのが混じってるかな。Rubyは日本発のコーディング規約がある気がする(まつもとさんの日記を見つけた)。

元記事にPerlのスタイルガイドがなかったんだけど,モダンなPerlスタイルガイドがあったら教えて欲しいです:-)。

PythonにはPEP8というコーディングスタイルガイドがあってよく読まれることは知っていたのですが,他の言語でもけっこうあるんですね〜。 スタイルガイドやコーディング基準のたぐいには,コーディングを効率化するためのエッセンスが詰まっていることが多いので,是非読んでみて下さい:-)。

.NET (C#/VB.NET)

PHP

C/C++

Python

Java

Ruby

HTML/CSS/Javascript

Objective-C

いろいろな言語のコーディング規約,スタイルガイドのリスト — TRIVIAL TECHNOLOGIES 2.0

1年前 | | 2010年 8月 21日 | このエントリーを含むはてなブックマーク