Rails

Herokuの手始め

毎回Herokuを使ってみようと思うたびに手順を忘れるのでメモ。 アプリケーションの準備 hello_herokuというRailsアプリケーションを作ることにする。 Herokuの標準のDBがPostgreSQLなので今回もそれを指定する。 Test::UnitとPrototype.jsは要らないので-JT…

nginx + unicorn + Rails on Mac

とりあえず動かしてみたのでメモ。 unicornを動かす まずはgemをインストール。 $ gem install unicorn unicornの処理を設定する $ cd <RAILS_ROOT> $ vi config/unicorn.rb <RAILS_ROOT>/config/unicorn.rbはこんな感じ(nginx + unicorn を試してみたからほぼそのまま拝借): # ワ</rails_root></rails_root>…

has_manyな関連先をまとめてINSERTする

fields_for、accepts_nested_attributes_forを使って、has_manyな関連先をまとめてINSERTする方法。ソースはgithubに上げておいた。ちなみにRails 3.0.8。 Post has_many Tags through Taggingsというモデルがあったとする。 とりあえずscaffoldはこんな感じ…

Rails勉強会@東京第58回に行ってきた

昨年12/18に行われたRails勉強会@東京第58回に行ってきた。 テストの話 「テストの話」で大まかに扱われるけど、細かく見ると次の3つの話題が出てくる。 どうやってテストを書くか うまいテストの仕方・資産としての残し方 テストの文化の浸透のさせ方・継続…

Cloudant+ActiveResource

nosqlgogoに行ってきた! そこでCouchDBについて初めて聴き、RESTful APIを持っているならActiveResourceで接続できるんじゃないか?と思い、Cloudantの2GB無料アカウントをもらったのでブログでも作ってみようと試してみた。 で、現在挫折中。残骸はgithub…

ActionMailerでShift_JISなメールを送る

ActionMailerを使うとメールはデフォルトではUTF-8で送信されるけど、それをShift_JISで送信するには次のようにする。ちなみに2.3.8で確認済み。 ビューのファイルをShift_JISで記述する ActionMailer::BaseでShift_JISにするように設定する 2については以下…

named_scopeの自動生成+お手軽検索

@ukstudioさんの「scopeでお手軽検索」 をRails2.3向けに少し修正^1しつつ、カラムごとに一致検索をするようなnamed_scopeを自動生成するようにフック部分にしかけをした。 例えばnameカラムとageカラムを持ったUserモデルについて、 class User ActiveRecor…

Rails3でTest::Unitを無効化

Rails3でTest::Unitを使わないようにする方法。rspecの導入方法については参考資料を参照。 まずrails newコマンドで新規プロジェクトを作成する際に-Tオプションを付けて、testディレクトリを作成させないようになる。 $ rails new new_project -T 次にconf…

ActiveSupport::Concern

以前書いたモジュールの特異メソッドをincludeして使うと同じことが、ActiveSupport::Concernを使うことでもうちょっと綺麗に書ける。 module A extend ActiveSupport::Concern included do # Aがincludeされた際に、includeしたクラスのコンテキストで実行…

ActiveModel::Callbacks

ActiveModel::Callbacksを使えばafter_saveなどのコールバックを手軽に実装できる。 まずActiveRecord::Baseのような抽象クラスを次のように定義する。 class AbstractModel extend ActiveModel::Callbacks define_model_callbacks :save def save _run_save…

rvmふたたび

ruby 1.9.2が出たのでrvmを入れ直して整理した。 $ gem install --user-install rvm $ PATH=$HOME/.gem/bin:$PATH $ rvm-install $ vi ~/.zshrc # ~/.gem/binをパスに追加、rvmの初期化コードを追加 $ exit 1.9.2と1.8.7をインストールする。 ただしMacPorts…

Rails 2.2.xでsession_idをもとにセッションにデータを突っ込む

例えば、外部にある認証系がこちらのAPIを叩く場合など、セッションが継続してないからsessionからデータを入れられないんだけど、session_idはわかってるからどうにかしたいな、というときに。 今更ながらRails 2.2.2で試してみた。2.3.x以降ではCGIモジュ…

モジュールでnamed_scopeを追加

モデルの機能ごとにモジュールにまとめてあとからまとめてincludeしたいというときに、どうせならその機能のために用意したちょっと複雑なnamed_scopeも同じように外に出してしまいたい。 そんな場合にはincludedとclass_evalを使う。 class Message ActiveR…

名前空間付き定数対応のObject.cost_set

Object.const_getをハックした話 を参考に、Object.const_setもモジュールによる名前空間付き定数に対応させてみた。車輪の再発明をした気がしなくはないけど、そこは気にしない。 class Object def self.nested_const_get(name) stack = (name.is_a?(Array)…

非同期処理にはWorkling

Ajaxで非同期に処理をキックして、一定間隔でその進捗を確認して…というのを書く必要があったのでBackgrounDRbを試してみたら、どうも使いにくかった。理由としては、 MetaWorkerのサブクラスでワーカを実装したのに、MiddleMan.workerで呼び出したときにはR…

rvm

基本はasakusa.rbによる記事を見ればok。 デフォルトのバージョンを指定する useサブコマンドに--defaultオプションを付ける。 rvm use 1.8.7 --default gemsetを使う rvm use 1.8.7 rvm gemset create rails222 rvm use 1.8.7%rails222 gem install rails -…

Machinist+DatasetでFixture代替

概要 Machinistは定義された条件下でテストデータを生成するプラグイン・gem。 DatasetはRubyのコードで記述したテストデータをDBに読み込むプラグイン・gem。 この2つを組み合わせることで(比較的)メンテナンスのしやすいfixtureの代替を構築することが可…

acts_as_paranoidの挙動

acts_as_paranoidを使うことでレコードの論理削除が容易になる。さらにリレーションが設定されているときには関連する論理削除も行われるように設定できる。 けど、どのメソッドがどのような挙動を示すのかがいまいち不鮮明だったので、ざっくりと調べてみた…

jrubyでrails

jrubyでrailsを動かす際の、導入手順のメモ。DBはMySQL。 sudo port install jruby vi ~/.zshrc > export JRUBY_HOME=/opt/local/share/java/jruby source ~/.zshrc sudo jgem install rails # JDBC用のドライバをインストール # 詳しくは http://jruby-extr…

Gitで無視するファイルを設定する

gitの操作(addやstatus)で特定のファイルを無視するには、リポジトリのルートディレクトリに.gitignoreファイルを設定すればよい。 ただし以下の点に注意。 .gitignore自体をadd/commitしないと効果は現れない 一度commitしたファイルはあとから無視設定を…

.irbrcでirbを便利に

~/.irbrcに、irbを起動したときに読み込むスクリプトを記述できる。さらにこの設定はRailsのscript/consoleでも有効になる。詳しくはirbとscript/consoleの超便利なTipsなどを参照。 というわけで、自分の今の設定をメモしておく。 require 'rubygems' requi…

モジュールの特異メソッドをincludeして使えるようにする

次のようなFooモジュールの特異メソッドbarをBazモジュールに特異メソッドとして使えるようにしたい場合、BazでFooをincludeするだけでは不十分。これは、includeによって追加されるのが、Fooのインスタンスメソッドのみだから。 module Foo def bar puts "b…

named_scopeの引数による条件分岐

named_scopeに引数を渡した場合、その型によって設定するSQLを動的に変更したいことがある。 こういうときにはlambdaに渡しているのブロック中で条件分岐すれば良い。 named_scope :member, lambda { |m| case m when Member { :conditions => { :member_id …

install rspec

いつも忘れるのでメモ: $ ruby script/plugin install git://github.com/dchelimsky/rspec.git -r 'refs/tags/1.2.8' $ ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git -r 'refs/tags/1.2.7.1' $ ruby script/generate rspec 追…

Growlでautospecの結果を表示

Growlの準備 Growlをインストール インストーラと一緒に入っているExtra/growlnotify/install.shを実行する autotest + growl で楽々テストを参考に、Growlが「受信される通知を聞く」、「リモートアプリケーション登録を許可」するように環境設定パネルから…

rake db:createでキャラクタセット関連っぽいエラー

MacPortsでインストールしたMySQL5を使用。 rake db:createで次のようなエラーが出た。 Couldn't create database for {"reconnect"=>false, "encoding"=>"utf8", "username"=>***, "adapter"=>"mysql", "database"=>"TestApp_development", "host"=>"localh…