rails

developmentを実現したいのでコードを読んでみる#5

昨日ログを出力するように変更したrailsを使って、ほとんど素のrails3のアプリでサーバの起動、GETリクエストx3、サーバの停止までにActionDispatch::Reloaderの各メソッドがどのように呼びだされるのか、developmentとproductionの場合それぞれについて出力…

developmentを実現したいのでコードを読んでみる#4

だんだん、ソースコードを読むだけではしんどくなってきたので、ちょっとずるをします。先日rails new --devの使い方を書きましたが、 http://d.hatena.ne.jp/akm/20120110#1326216516railsの調査用のコードを入れまくって、ブログに書こうとおもって、fork…

rails new --devの使い方

$ git clone https://github.com/rails/rails.git $ cd rails/ $ git branch -r $ git checkout 3-2-stable $ cd .. $ ruby rails/railties/bin/rails new rails3_20120110 --devこれでcloneしたリポジトリの(3-2-stableブランチ)を参照するrailsアプリが生…

developmentを実現したいのでコードを読んでみる#3

昨日は、ActionDispatch::Reloader で使われている ActiveSupport::Callbacks のドキュメントを読みました。今日はそれが ActionDispatch::Reloader でどう使われているのかを追いかけたいと思います。 https://github.com/rails/rails/blob/3-1-stable/acti…

developmentを実現したいのでコードを読んでみる#2

昨日はRails::Applicationの継承関係をはっきりさせて、初期化のあたりをどうなっているのかRails Guideのドキュメントをみつけてわーいってところまで行きました。 Rails::Railtie <|---- Rails::Engine <|---- Rails::Applicationhttp://guides.rubyonrail…

developmentを実現したいのでコードを読んでみる#1

Railsのdevelopmentモードのように特定のディレクトリ以下のソースコードを適切なタイミングで読み直す機能を作りたいのですが、実際Railsって何やっているのか分からんので調べます。 cache_classes railsアプリの config/environments/development.rb には…

Rails3.1アプリの本番サーバにJSのエンジンを入れない方法

rails-3.1 いえーい!っていうわけでついついcoffee scriptを使ったんだけど、ステージング環境のRedhatにデプロイしてみたら、画面上で動くはずのJSが動かない。 見てみるとapplication.jsの中身が throw Error("ExecJS::RuntimeUnavailable: Could not fin…

cucumberでモデル名として日本語も使えるようにpickleを拡張してみた

Railscasts #186 で紹介されているpickleが素晴らしい http://railscasts.com/episodes/186-pickle-with-cucumberこんな風にモデルのデータを定義できたりする https://github.com/akm/pickle_sandbox/blob/master/features/display_products.feature Featur…

selectable_attr_rails-0.3.12リリース

http://github.com/akm/selectable_attr_railsselectable_attr( http://github.com/akm/selectable_attr )をrailsで使うためのgemであるselectable_attr_railsがじつはruby-1.9系で動いていなかったので、動くようにしました。最近、ちゃんとメンテできてい…

mongoidのassociation

ややこしい経緯でmongo_mapperを使い続けて来たけど、rails3への移行ができたので、mongoidへ移行することにした。でもこれまでKVSを何個か渡り歩いてassociation周りの使い方が違っていることが多く、ちょっと心配だったのでテストを書いてみた。 http://gi…

activerecord-3.0.0beta3のモデルのモジュール構造

deviceをインストールしたUserの構造を、 http://gist.github.com/11849 のメソッドを使って出力してみました。 >> User.tree_ancestors [C] User [M] Devise::Models::Trackable [M] Devise::Models::Confirmable [M] Devise::Models::Validatable [M] Devi…

CassandraObject::Base.connectionの構造をしらべる

タイムアウトするまでの時間を指定したくなった。でもどこで設定していいのかわからない。Rubyのクラスの構造を逆ツリーで出力するスクリプトを以前書いたので、それを使って調べてみる。 http://gist.github.com/11849 $ irb -rubygems # クラス構造を調べ…

関連keyspaceに気をつけろ

cassandra_objectでは、associationメソッドを使って、belongs_to, has_manyに当たるものを宣言します。 http://github.com/NZKoz/cassandra_object/blob/master/test/fixture_models.rbよくよく見てみると、関連のためのFKのようなカラムの定義がありません…

Rails3.0でcassandra_object

http://github.com/akm/cassandra_object_rails3 に、http://github.com/NZKoz/cassandra_object のtest以下のモデルをrails3.0アプリとして動くようにしました。 ただし、shouldaがまだrails3対応が終わってないみたいなので、 http://github.com/akm/cassa…

Railsのプラグインを作るのに一番やるべきこと

昨日はテクニック中心の話になっちゃってたけど、一番やるべきことを書いてなかった。RailsやRubyに限った話じゃないけど、何かを拡張するものを作るなら、その対象のソースコードを読むこと。

Railsのプラグインを作る基礎テク

developmentモードとproductionモード 今日チームのメンバーに聞かれて気付いたことですが、developmentモードが便利過ぎるからか、リクエストが来るたびにコントローラのクラスがロードされるように勘違いする人もいるみたいです。プラグインを作るときには…

schema_comments, selectable_attr, selectable_attr_railsアップデート

schema_comments 0.1.2 rake タスクを実行するとdeprecatetionのwarningが出ていたので修正しました。 http://github.com/akm/schema_comments/tree/0.1.2 selectable_attr 0.3.11 警告などのメッセージをSelectableAttr.loggerを使って出力するようにしまし…

どのdelayed_jobを使うべき?

なんだか変な時間に起きちゃったので、ちょっとメモ。gemで一発で入るものはこれで、最新は1.8.4 http://gems.rubyforge.org/gems/delayed_job サイトはここ http://github.com/collectiveidea/delayed_jobこちらは、capistranoのレシピもあってデーモンで動…

selectable_attr_rails 0.3.10リリース

http://github.com/akm/selectable_attr_rails お恥ずかしい話ですが、gemcutterに移行したにも関わらず古いgemへの依存が残っていたので、gemcutterでのselectable_attrへ依存に直しました。

schema_comments 0.1.1 リリース

http://d.hatena.ne.jp/akm/20090918#1253272048 でご指摘いただいたgemでインストールした場合のrakeタスクですが、完璧に抜けてました、すみません。gemインストールでもrakeを使えるようにして、0.1.1としてリリースしました。 http://github.com/akm/sch…

非同期処理とか

http://www.scribd.com/doc/2589535/Handling-LongRunning-Tasks-in-Rails に10コくらいまとめて書いてあるけど、結局のところbjを使えって結論らしいっす。でも去年の4月のだから要注意いや、こっちの方がすばらしくよくまとまってる。今年11月のだし http:…

ar_finder_form

0.1.0をリリースしました。 http://github.com/akm/ar_finder_form/tree/0.1.0findやpaginateのオプションを組み立てるフォームを作るためのものです。ずっと前にプラグインとしてだけ作ったものでしたが、仕事で使おうとしたら作りが気に入らなかったので作…

findの:joinsでActiveRecord::ReadOnlyRecordになっちゃう

The :joins option now implies :readonly, so if you use this option, saving the same record will now fail. :joinsを指定したfindで取得したオブジェクトの更新がこれまでなかったからか全然知りませんでした。こういう場合は代わりに:includeを使うの…

すげー

Bullet ? Help you reduce the number of queries with alerts (and growl). Rails Indexes ? Rake tasks to find missing indexes. Scrooge ? SQL query optimizer, so you query for only what your page need 3つのプラグインが紹介されているけど、3つ…

state_flow 0.2.1 リリース

トランザクションの制御をロールバックを呼び出すんじゃなくてトランザクションの外側から再度例外のハンドラ(例外を指定したイベント)で処理を進めるようにしました。 $ sudo gem install state_flowで入ります。READMEを更新してないけど、使い方はおんな…

state_flow 0.2.0

状態遷移を書くためのプラグイン/gemなんですが、0.1.0は本能の赴くままに書いてたんですが、実際やっぱUMLちっくな方が分かりやすいので、UMLのステートチャート図と対応するようにほとんど0から作り直しました。詳しくはこちら。http://github.com/akm/sta…

vestal_versionsとmagic_userstamp

create/update時にモデルの差分をDBに記録してくれるライブラリであるvestal_versions http://github.com/laserlemon/vestal_versions/これだけでも「いつ何がどう変更されたか」というモデルの変更履歴を記録していくことができますが、これにmagic_usersta…

MagicUserstamp 0.1.1 リリース

先日userstampを作り替えてモデル内でuserstampの定義をしなくてもオッケーって感じにしました。今度はそれをgemで使いたくなったのですが、中身を大きく作り替えちゃったんで、userstampという名前で僕がgem作っちゃまずいかなと思って別の名前にしてみたわ…

state_flowプラグイン

先ほど0.1.0をリリースしました。 StateFlowとは? 状態遷移のためのDSLを提供するためのActiveRecordを拡張するプラグインです。 Railsで非同期処理のためにステータスに関する記述をする際に便利です。こんな感じの記述が可能です。 class Page < ActiveRe…

スレッドを出力するLogger

どのスレッドで実行された処理なのかを追いかけたくて書いてみました。