Rails
最近立て続けにレースコンディション問題に遭遇したのでメモ。 レースコンディション(競合状態)とは、複数のプロセスやスレッドが共有リソースに対して何らかの操作をする際に、処理のタイミングによって結果が異なってしまう状態のこと。よくトランザクショ…
普段仕事でRails を使っている身ですが、Rails 2.x 系を使っているものが1つもない。結構前からRails 3 の話題がでてきている今、そろそろRails 2.x をまともに使っておきたいと思ったので、まずはREST について調べました。最初にREST について調べたのは、…
mala さんのMySQLにおけるbulk insert と bulk update - 金利0無利息キャッシング – キャッシングできます - subtechのエントリーを見て, MySQL でbulk update ができることを知り, 丁度欲しい機能だったのでとりあえず動くだけのメソッドを実装. # User.ext…
今年はRubyKaigi に行ってきました。今回聴いたセッションの内、いくつかのメモを残します。全てを1エントリーにまとめるのは量的にも厳しいし、エントリの切り方としても微妙なので小分けにして書いていきます。 あくまでメモなので間違いがあるかもしれま…
Rails でfind_by_sql を使う場合に、大きいSQL だと次のようにSQL 中に関数を使ってしまうことがありました。 単純な例だとこんな感じ。 User.find_by_sql([<<-SQL, {:id => 1}]) SELECT * FROM users WHERE IF( :id, id = :id, 1 ) SQL でも、このようにIF …
rails で携帯アプリと言ったら定番のjpmobile の超軽量コピー。 できること キャリア判定 端末情報取得 ソース # porting from http://github.com/darashi/jpmobile/tree/0.0.3 class Mobile def self.carriers self.constants - %w[Base] end def self.crea…
Rails でQR コードを出力する必要がありました。要求は以下の3点。 普通のビュー内でも使いたい Helper でQR コードAPI用のURL を生成して、それをimage_tag に渡せばおk QR コードだけポップアップする機能も欲しい Controller でsend_data + ビューでlink_…
昨日、はっまった ^^); ・・・ ActiveRecod.find(id) の id は文字列でも良いが、全てのAPIがそうなわけではない! - yuum3のお仕事日記と全く同じハマり方をしました。 form のselect はハマる 例として、商品を作成するフォーム。商品にはジャンルが指定で…
rails の2.x 系をまともに勉強していなかったので、調査しました。コピペの部分も多いですが、情報ソースと共に記述します。 あまり変更点がなかったマイナーアップデートは除外してあります。 1.2.4 2.0 からエラーになる構文に対する警告出力 1.2.4 で警告…
現在の環境 ruby 1.8.7 rubygems 1.3.1 rails 2.2.2 他のバージョンのrails はインストールしていない 試しにfreeze この状態で、1.2.6のrails アプリに対してfreeze を実行しようとする。 1. config/environment.rb の内容を書き換える(今回の例では1.2.6) …
あるテーブルのカラムがシステムのみによって編集される値で、ユーザから編集させたくない場合、そのvalidation が欲しいと思った。 例えば、はてなブックマークのエントリーのタイトルは、ユーザは編集できず、ページのtitle タグの内容で固定したいみたい…
読んでいたコードで面白いテクニックを使っていたのでメモ。 Rails のActiveRecord のfind 系メソッドは優秀だと思うけど、自分でSQL を書きたい時があると思います。そこで、find_by_sql を使うわけですが、その際、大規模なSQL を書く場合のTips です。 環…
昨日、ウェブキャリアさんが主催する月間524万人が利用する食のインフラ、「クックパッド」のものづくりセミナーに行ってきました。 クックパッドと言えばRails での大規模リニューアルがニュースになりました。また、大規模開発には向かないと言われたこと…
以下の動作が実際どのような動きをしているかメモ。 class User < ActiveRecord::Base belongs_to :club end User.column_names => ["id", "club_id" ....] user = User.find(:first) user.club => #
今動かしているアプリケーションで起っている問題です。アプリケーションのログが肥大化するのを防ぐ為に、logrotate でログのローテーションを設定しています。 しかし、ローテーションしたあとはログが書き込まれないという問題が起こってしましました。 …
注:このシェルスクリプトは、僕の環境で動いたものです。汎用的には作られていません ruby 1.8.5 で開発されていたアプケーションがあって、今まで1.8.6 でいじっていたのですが、やはり環境はあわせようと思ってあわせました。その際のメモです。 手作業で…
これは、自分のマシンに入っているrails は2.0.1 だけど、特定のアプリケーションは1.0.0 で動かしたいという時の解決方法。 方法1. vendor 以下にrails をfreeze する この方法は、アプリケーション内にrails のソースを入れてしまう方法。方法は以下を参考…
前々から使いたかったautotest を導入したので手順を記録します。OS はMac OS X(10.5.5), ruby は1.8.7です。 なお、参考にしたのは「まるごと Ruby! Vol.1(p.124~p.127)」です。 やること autotest のインストール aiutotest を使ってみる autotest のカ…
rails + lighttpd でアプリを動かしてみたのですが、アクセスしたらCSS が読み込めなくて少しはまった。ということで、対応方法をメモ。すごい基本的なことだったんですけどね(ノд`) 環境 OS Red Hat Enterprise Linux ES release 4 (Nahant Update 4) ru…
以前に書いたコードを読んでいると、1カラムの値だけを変えるからといって、update_attribute メソッドを使っている部分があった。これはあまりよくない update_attribute とupdate_attribtues の違い 前者は1つのカラムの値を、後者は複数のカラムの値を更…
昨日、Web Career さんが主催しているRails セミナーに行ってきました。 スピーカーは、RAWHIDE. のCTO 吉見 和也さん(あとで読むRailsのススメ - ヨシミ@RAWHIDE. - builder by ZDNet Japan でblog 執筆中)でした。内容は、技術面というより、開発チーム…
今まで、機能テストで、1つのテストメソッドの中で何回もリクエストを送るコードを書いていたことがありました。テストケースを1メソッドに割り当てると、どうしてもrake が重くなったり、メソッドが増え過ぎたりとあって、index アクションの処理はtest_in…
windows 用のTortoiseSVN なら、Settings から共通無視リスト(Global ignore pattern)を設定できます。 Rails のプロジェクトの場合は、以下のような感じになります。database の設定ファイル、スキーマの情報ファイル、log 、tmp ディレクトリを除外して…
トランザクションブロックとは 「プログラミングRuby 第2版 言語編」に、トランザクションブロックというものがのっていました。 「プログラミングRuby 第2版 言語編」(p. 46) ブロックは、何からのトランザクション制御の下で実行する必要がある一連のコ…
rails のアクションに対するコールバックは、filter 機能を使うことで実現できます。 filter には、アクションの実行直前に動作をかます「before_filter」、アクションを実行し、レスポンスが生成された後に動作をかます「after_filter」があります。 これだ…
知りませんでした。Gem って、yum とかと同じで、パッケージ管理をするものだと思ってました。今回、Gem のアップデートがあったということで、以下のように「0.9.4」から「1.2.0」にアップデートしたら、「RMagick 1.13.0」が動かなくなった。 最初に、gem …
以前、メソッドの引数としてHashを使うといいというエントリーを書きました。 Hash引数便利よね - Slow Dance その中で、特にオプション引数に対して有効ということを書きました。 今回は、オプション引数とActiveRecord::Base.extract_options_from_args!を…
railsでテストコードを書いている際に、次のようなコードが多くあった。 assert_equal [1, 2, 3], assigns(:users).map(&:id) result = User.find(:all, :conditions => ["school = ?", "Hoge"]) assert_equal [2, 3], result.map(&:id) 面倒だ なので、Arra…
Rails 2.1の安定板がリリースされました。新しい機能はこんな感じとのこと。 Rails-2.1リリース - Hello, world! - s21g タイムゾーンのサポート Dirty tracking(なんだか面白そう) Gemの依存関係(前々回のRails勉強会でやってたやつ) Named scope マイ…
テストを書いていると、こんな風にTimeオブジェクト同士を比較する時があります。 assert @user.save assert_equal Time.now, @user.reload.updated_at まぁ、updated_atはrails側でもテストしているのでやる方はあまりいないかもしれませんが、自分でも「ev…