akishin999の日記

調べた事などを書いて行きます。

Ruby

Qiita に書いた記事をエクスポートするツールを作ってみた

会社で使っている Qiita Team に投稿した記事を画像ファイルも一緒にエクスポートしたくて書いたスクリプトがあったのですが、せっかくなのでコードを整理して gem にして公開してみました。https://rubygems.org/gems/qiita-export以下でインストールできま…

Ruby から Sentry を使う

前回インストールした Sentry に Ruby からイベントを登録してみます。 Ruby から Sentry を使うには、プロジェクトの設定画面の Ruby のところにも書いてあるように sentry-raven という gem を使います。getsentry/raven-ruby https://github.com/getsentr…

Ruby から Windows の共有フォルダにアクセスする

Linux 上で Samba マウントせずに Windows の共有フォルダにアクセスしたかったので、Ruby の sambal というライブラリを使ってみました。johnae/sambal https://github.com/johnae/sambal試した環境は以下です。 CentOS 6.4 / 6.5(どちらも x86_64) Ruby 2.…

後置の rescue では例外クラスを指定できない

タイトルの通りなんですが、知らなくてちょっと悩んだので忘れないようにメモ。require 時の LoadError を無視したくて以下のようにしたところ、何度試しても rescue 出来ませんでした。 require 'hoge' rescue LoadError #=> cannot load such file -- hoge…

FakeFS でファイルアクセスをテストする

ファイルシステムの操作に関連するクラスのモックオブジェクトを提供するライブラリ「FakeFS」を使ってみたので、使い方をメモしておきます。defunkt/fakefs https://github.com/defunkt/fakefs インストール % gem install fakefs --no-rdoc --no-ri Rails …

Capistrano でローカルに置いてあるアプリケーションをデプロイ

Rails アプリケーション開発中に、ローカル環境で Passenger + production モードの確認を簡単に出来るようにしたかった事もあり、試しに Capistrano でデプロイできるようにしてみました。Apache、Ruby、Passenger 辺りはインストール・設定済みとします。 …

Rails で ReadOnly なデータベースを扱う場合のいろいろ

Rails で書き込みをしたくない参照専用の DB を扱った際に、間違えて更新してしまわないために変更した箇所を備忘録代わりにメモ。 バージョンは 3.2.13 です。 ActiveRecord 使っているのは Rails 3 なんですが、なんとなく Rails 4 の concerns っぽくして…

出力される JSON の形式をカスタマイズする

to_json で出力される JSON 文字列の形式をカスタマイズする方法を調べてみました。 Ruby 2.0.0p247 で確認しています。まずは普通に to_json してみるとこんな感じ。 require 'json' t = Time.local(1978, 5, 31, 19, 30, 40, 205000) h = {id: 100, name: …

Rails 以外で Settingslogic を使う

最近は Rails で環境毎に変更する必要がある独自設定の管理に Settingslogic を使っています。binarylogic/settingslogic https://github.com/binarylogic/settingslogic使い方はこの辺が分かりやすいです。Rails - settingslogicで定数を管理する - Qiita […

rbenv を anyenv で管理する

rbenv や plenv などをまとめて管理する anyenv を使ってみました。riywo/anyenv https://github.com/riywo/anyenvanyenv を使う事で、新しい *env 系コマンドを導入する度に初期化処理を .bash_profile に書く、といった作業から解放されます。現在は以下の…

tmux + rbenv の環境で指定した Ruby が使われない件

以前、tmux + rbenv の環境で、指定したバージョンの Ruby が何故か使われなくなってしまった件がありました。tmux + tmuxinator + rbenv の環境で RBENV_VERSION が勝手に設定されてしまう件 http://d.hatena.ne.jp/akishin999/20130303/1362308566この時は…

redis-rb で自動的に圧縮して保存する

redis-rb を使って Redis に値を保存する際に自動的に圧縮して、取り出す時には自動的に展開してくれたら便利だな、と思って試しに作ってみました。Redis::Client へのモンキーパッチで、コマンド判別して Zlib::Deflate と Zlib::Inflate 使って圧縮・展開…

Apache 2.4 + Ruby 2.0 + Passenger 4 環境を構築する

最新版の Ruby と Apache での環境構築手順を整理してまとめてみました。 それぞれ RPM を作成してインストールしています。 また、Passenger も最新の 4 系にしてみました。OS は Webサーバ、RPM作成用サーバ共に CentOS 6.4 x86_64 です。 rpm-build の準…

Ruby で tar.gz を扱う

Ruby で tar.gz を扱う方法を調べたところ、archive-tar-minitar というライブラリと zlib の組合せが簡単そうでした。archive-tar-minitar | RubyGems.org | your community gem host http://rubygems.org/gems/archive-tar-minitarというわけで使ってみた…

redis-rb で ConsistentHashing の仮想ノード数を指定する

redis-rb では Sharding のアルゴリズムとしてコンシステント・ハッシュ法が使われています。 コンシステント・ハッシュ法でサーバごとのキーの偏りを減らす為の仮想ノードという仕組みがあるのですが、redis-rb を使う場合に仮想ノードの数をどうやって指定…

Redis でダウンタイム無しの再起動

Apache でいうところの「graceful restart」的な機能が Redis には無いのかを調べてみたのですが、どうやらそういった機能そのものは無いようでした。 では Redis の場合はサービスを無停止でバージョンアップなどを行い、プロセスを再起動するにはどうした…

Redis で Sharding してみた

Redis の Sharding は現状クライアントサイド、つまりライブラリ依存で実現されています。 ここでは Ruby と Java のライブラリで実際に Sharding を試してみました。 redis-rb redis/redis-rb · GitHub https://github.com/redis/redis-rbRuby から Redis …

Ubuntu に rbenv で Ruby 1.8.6 系をインストールしようとしたらハマった

タイトル通りですが、ちょっと古いコードの検証環境が欲しかったので、開発環境として使用している Ubuntu に rbenv で Ruby の 1.8.6 系をインストールしようとしたところ、予想外にハマって時間を取られたのでまとめておきます。環境は Ubuntu 12.10(32bit…

tmux + tmuxinator + rbenv の環境で RBENV_VERSION が勝手に設定されてしまう件

tmux + tmuxinator + rbenv の環境で rbenv local を設定しても指定した Ruby が使われない、という現象が発生。 調べてみると環境変数 RBENV_VERSION が設定されているため、rbenv がそちらを見てしまう事が原因のようでした。しかし RBENV_VERSION を設定…

Ruby 2.0 で Passenger を動かしてみた

Ruby 2.0.0-p0 がリリースされましたね。 ということで、早速インストールして Passenger で Rails の簡単なサンプルアプリを動かすところまでやってみました。環境は CentOS 6.3 x86_64 です。 準備 まずは必要なパッケージをインストールします。 README …

rails-dev-box を使ってみる

Rails 本体の開発環境(Ubuntu)をコマンド一発で作成できる rails-dev-box を使ってみました。rails/rails-dev-box GitHub https://github.com/rails/rails-dev-boxRails 本体用開発環境のようですが、普通に Rails アプリケーションの開発にも便利に使えそう…

1.8 の $LOAD_PATH でうっかりハマる

今日 1.8 系を触っていて、うっかり 1.9 との $LOAD_PATH の仕様の違いで小一時間ハマってしまいました。 1.8 系では $LOAD_PATH に自動でカレントディレクトリが含まれているんでしたね・・・。具体的には以下のようなライブラリの検証コードをいくつか書い…

Ruby のヒアドキュメントのあまり見かけない使い方

最近知った Ruby のヒアドキュメントのあまり見かけない(?)機能をいくつか備忘録としてまとめてみました。 メソッドの引数に渡せる 以下のようにしてヒアドキュメントをメソッドの引数にそのまま渡せます。 def here_method(arg1, arg2, arg3) puts arg1 …

Ruby の sprintf で名前付きパラメータ

先日会社の後輩に教えて貰ったんですが、Ruby 1.9 から Kernel.#sprintf や String#% が Hash を受け取れるようになっていたんですね。 ずっと知らなかったんですが、便利だと思ったので試してみました。これにより、文字列で SQL での名前付きプレースホル…

Ruby で PDF にフッタを埋め込む

Pdftk を使用して Ruby から PDF にフッタを埋め込む方法を調べてみました。 ちなみに Ruby のバージョンは以下です。 # ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] Pdftk のインストール Pdftk は大抵のディストリビューションで…

Ruby 1.9 の正規表現の名前付きキャプチャ

Ruby 1.9 の正規表現では名前付きキャプチャが使えるそうなので、いまさらですがちょっと試してみました。適当なサンプルを思いつかなかったので、とりあえず Apache の Common Log Format 文字列を分解してみます。 正規表現が若干適当なのは名前付きキャプ…

CentOS 6.2 用に Ruby 1.9.3 p194 の RPM を作成する

CentOS 6.2(x86_64)上で Ruby 1.9.3 p194 の RPM を作成してみました。 当初 checkinstall を使おうと思ったのですが、紆余曲折ハマった挙句、結局上手く行かなかったため、rpmbuild を使いました。 必要なライブラリのインストール # yum groupinstall -y "…

tmail-1.2.7 で Encoding::CompatibilityError

Ruby 1.9.3 で Rails 2.3.12 アプリケーションを動かしてみたところ、iso-2022-jp でメールを送信している箇所で以下のようなエラーが発生しました。 incompatible encoding regexp match (ASCII-8BIT regexp with ISO-2022-JP string) /var/rails_apps/exam…

pik を使ってみた

Windows 環境で複数の Ruby 処理系を管理できる pik を使ってみました。 vertiginous's pik at master - GitHub https://github.com/vertiginous/pik インストール インストールは gem から行えます。 また、下記ページにて配布されている msi インストーラ…

Windows の Ruby で native extension を使う

以前 Windows 環境で Cassandra を触った時に書いた RubyInstaller で native extension を使うための Development Kit 導入方法が変わったようなのでメモです。 RubyInstaller のインストール まずは RubyInstaller のインストールからです。 Downloads htt…