タグ

ブックマーク / lukesilvia.hatenablog.com (6)

  • MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary

    先日、作っているアプリケーションにバグが発生しました。バグの内容は次のようなものでした。 同時に存在してはいけないはずのデータが、DB に存在する 整合性のチェックはアプリケーションレベルで行っている 一意制約のような単純なものではないので、アプリケーションレベルで実装 整合性のチェックロジックは正しい これに対し、バグは次のような状況で発生したと仮説を立てました。 ユーザがレコードを一括登録しようとする 登録ボタンを押したがレスポンスが遅い この間、整合性チェックが走っている ユーザはもう一度登録ボタンを押した 2回目の登録の整合性チェックが走り始める 1回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックの間、DBにはまだ1回目の登録によるINSERTが実行されていないので、チェックを通過した 結

    MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary
  • tscreen に移行した - LukeSilvia’s diary

    OSX のデフォルトのscreen はpbcopy が動かない問題とかがあり、今までは開発版のscreen を使ってました。ですが、開発版の方はZenTestにくっついているautotest と連携する際にステータスラインの部分がきちんと動かなかったりしてました。 そこで、tscreen に移行したらどちらも解決!「~/.screenrc」もそのまま使えるので便利。縦分割もできます。 インストール screen のコピーモードでコピーしたものをpbcopy に渡すパッチをあてる このパッチをあてておけば、screen のコピーモードでコピーしたものをそのままペーストできるので便利。 cd ~/src wget http://www.steve.org.uk/Software/tscreen/dist/tscreen-0.4.9.tar.gz tar xzf tscreen-0.4.9.ta

    tscreen に移行した - LukeSilvia’s diary
  • クラスがレシーバの場合のclass_eval とinstance_eval の違い - LukeSilvia’s diary

    ここ以前から分からなかったので調べてみました。 基 class_eval Module で定義されている なので、クラスやモジュールにしか使えない irb(main):009:0> String.respond_to?(:class_eval) true irb(main):011:0> Enumerable.respond_to?(:module_eval) true irb(main):012:0> 'xxx'.respond_to?(:class_eval) false instance_eval Object で定義されている なので、クラス(Class クラスのオブジェクト)にもオブジェクトにも使える irb(main):003:0> String.respond_to?(:instance_eval) true irb(main):004:0> 'a'.respond_to?

    クラスがレシーバの場合のclass_eval とinstance_eval の違い - LukeSilvia’s diary
    a2ikm
    a2ikm 2010/03/04
    わかるようなわからないような…用語に慣れていないからかな
  • find_by_sql を使う際のTips - LukeSilvia’s diary

    読んでいたコードで面白いテクニックを使っていたのでメモ。 Rails のActiveRecord のfind 系メソッドは優秀だと思うけど、自分でSQL を書きたい時があると思います。そこで、find_by_sql を使うわけですが、その際、大規模なSQL を書く場合のTips です。 環境 ruby 1.8.7 rails 2.2.2 パラメータによってSQL 自体を変えたい場合 例えば、SQL が以下だったとします。 RDBMSSQLite3 SELECT * from users where name = xxx; これを扱う、find_by_sql が以下のような感じ。 User.find_by_sql(["select * from users where name = :name", {:name => 'bob'}]) #=> [#<User id: 1, name: "

    find_by_sql を使う際のTips - LukeSilvia’s diary
  • Rails 1.2.3 〜 2.2.2 までの主な変更点のまとめ - LukeSilvia’s diary

    rails の2.x 系をまともに勉強していなかったので、調査しました。コピペの部分も多いですが、情報ソースと共に記述します。 あまり変更点がなかったマイナーアップデートは除外してあります。 1.2.4 2.0 からエラーになる構文に対する警告出力 1.2.4 で警告がでなければ、2.0 で問題なく動くと言われている セッション固定攻撃対策として, URLベースセッションのサポートを削除 ActiveRecord::Base#to_jsonを使っている場合に発生する可能性があるXSS攻撃を回避するようにJSONエンコーディングアルゴリズムが変更 参考 Rails 1.2.4登場 - 2.0での対応予定者もバージョンで警告チェックを | エンタープライズ | マイコミジャーナル 1.2.5 JSONXSS 修正 参考 Ruby on Rails 1.2.5公開 - JSON XSS脆弱性を

    Rails 1.2.3 〜 2.2.2 までの主な変更点のまとめ - LukeSilvia’s diary
    a2ikm
    a2ikm 2009/11/06
  • method_missingとfind_by_xxx - LukeSilvia’s diary

    Refactormycodeを見てたら、method_missingを使った例があったので、試しに使ってみた。 method_missingとfind_by_xxx Railsには、このmethod_missingを使ったハックがある。find_by_name、find_all_by_nameとかのfind_xxxメソッドだ。 method_missingは通常はそのメソッドがなかった時にエラーを発生させる仕事をしている。(リファレンス)Railsでは、このメソッドをオーバーライドして、find_by_xxxを実現している。 find_by_xxxの仕組み 例えば、Userモデルがあり、usersテーブルにnameカラムがあるとする。この時、find_by_nameは簡単に言えば次のよう処理を行う。 1.User.find_by_name("bob")を呼ぶ 2.Uesrクラスにfind_

    method_missingとfind_by_xxx - LukeSilvia’s diary
    a2ikm
    a2ikm 2009/09/30
  • 1