トップページ⇒php
1001コメント328KB

【RoR】Ruby on Rails Part11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/12/11(土) 10:58:56ID:???
■前
【Ruby】Ruby on Rails Part10
http://hibari.2ch.net/test/read.cgi/php/1282991262/

■参考サイト
<英語>
本家:http://rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails


<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/

http://twitter.com/dhh
http://www.loudthinking.com/
0147nobodyさん2011/01/09(日) 11:02:47ID:hPSqOLvQ
つまり毎回forkしてるから効率悪いということ
0148nobodyさん2011/01/09(日) 11:04:24ID:???
unicorn使えば毎回forkしてないってことですか?
さすがrails様は次元が違いますね^^
0149nobodyさん2011/01/09(日) 12:04:15ID:???
なに言ってるのかわからんな
0150nobodyさん2011/01/09(日) 13:09:00ID:???
railsが勝手に機械的にコピペしてくれてるだけなんで
ただの末端ユーザーにとってはVBと違いはほとんど無い
0151nobodyさん2011/01/09(日) 13:28:56ID:???
PHP房とrails使いの差は、rails使いは試行錯誤の結果「PHPでは高負サイトは無理ではないか」という
試行錯誤を繰り返すタイプの「生粋のエンジニア」なのか「似非Webエンジニア」なのかという差ということですね。

「PHPだけできます」という人間は吐いて捨てるほどいるけど、rails使いのように、appサーバの負荷や

フレームワークの負荷に敏感な「生粋のエンジニア」は少ないということですね」

これらの差は、非エンジニア職である経営層は一生気づくことのない差なんでしょうね。
その差に気づくことが出来ない経営者が仕切っている会社は
一生、web業界において、勝ち組になることは出来ないでしょう。
0152nobodyさん2011/01/09(日) 16:17:49ID:???
糞経営者は目に見える部分しか見ないという点には同意
0153nobodyさん2011/01/09(日) 18:02:13ID:???
>>151
?

>>152
それは同意だな
0154nobodyさん2011/01/09(日) 20:35:35ID:???
PHPの方が圧倒的に需要が多いから
Rails厨が何を言っても憐れに見える。

Cakeの誕生でわざわざRailsの開発環境整える意味も皆無になったわけで
さっさと諦めればいいのに。
0155nobodyさん2011/01/09(日) 20:54:44ID:???
>>142
向上心なかったらCakeなんか使わねーだろw
0156nobodyさん2011/01/09(日) 22:35:08ID:???
array() いっぱい書きたくないわ
0157nobodyさん2011/01/10(月) 01:10:46ID:???
3.1っていつ頃出るんでしょうか
0158nobodyさん2011/01/10(月) 04:09:07ID:SqSUf4Y5
質問させていただきます。
Mac OS X 10.6.6
Ruby 1.8.7
rails 2.3.8
MySQL5.5.8
でRuby on Railsを使いたいのですが
rake db:migrateとすると以下のエラーが出ます。

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
dlopen(/Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle, 9): Library not loaded: libmysqlclient.16.dylib
Referenced from: /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle
Reason: image not found - /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle

(See full trace by running task with --trace)

gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
を行いgem listで調べるとmysql (2.8.1)が入っています。
いろいろ調べたのですがわからないので誰か教えてください。
よろしくお願いいたします。
0159nobodyさん2011/01/10(月) 09:19:57ID:KNJg+u2Y
http://hibari.2ch.net/test/read.cgi/hosting/1033299208/l50

http://hibari.2ch.net/test/read.cgi/hosting/1259841636/l50

http://hibari.2ch.net/test/read.cgi/hosting/1291993724/l50


http://daybook.biz/category/server/dedicatedserver/


http://www.webhostingtalk.com/forumdisplay.php?f=36
0160nobodyさん2011/01/10(月) 09:30:12ID:Us1Ofr5V
DYLD_FALLBACK_LIBRARY_PATH=/usr/local/lib
export DYLD_FALLBACK_LIBRARY_PATH
とやったらどうなる?
01611582011/01/10(月) 22:27:20ID:SqSUf4Y5
>160
返信遅くなってすみません。

なにも出ません。
そしてrake db:migrateの結果も変わりません><
0162nobodyさん2011/01/10(月) 23:19:28ID:???
32bitのドライバが入ってるんじゃね?
一回gem uninstall mysqlしてからやり直してみては?
0163nobodyさん2011/01/10(月) 23:31:26ID:???
gem install mysql2
じゃなかったっけ?
01641582011/01/11(火) 00:25:44ID:w92gJgj0
>163
gem install mysql2 は駄目でした

>162
これから64bitいれ直してみます!
01651582011/01/11(火) 00:33:28ID:w92gJgj0
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
で入れたのですがだめでした。。。
もうかれこれ4日くらい同じところでつまずいています。泣
0166nobodyさん2011/01/11(火) 00:47:17ID:???
ていうか、10.6になってからmysqlを入れ直したかどうかとか、その辺も分からないとどうしようもない。
01671582011/01/11(火) 00:57:51ID:w92gJgj0
情報が不足してしまってすみません。

12月にmacを買いまして最初から10.6.6です。
それでmysqlを入れました。
0168nobodyさん2011/01/11(火) 07:49:17ID:???
だからそのmysqlはどうやって入れたのよ。
0169nobodyさん2011/01/11(火) 11:12:56ID:???
references使ったらエラーが起こるんだけどどうすればいいの?

class CreateRelationCategories < ActiveRecord::Migration
  def self.up
    create_table :relation_categories do |t|
      t.references :post
      t.references :category
      t.integer :main

      t.timestamps
    end
    add_index :relation_categories, :post
    add_index :relation_categories, :category
  end

  def self.down
    drop_table :relation_categories
  end
end
0170nobodyさん2011/01/11(火) 11:52:39ID:???
>>167
rubyもmysql5も全部portで入れた方がいいと思うよ
0171nobodyさん2011/01/11(火) 12:07:49ID:KMpfNobV
>>169
どんなエラーよ
0172nobodyさん2011/01/11(火) 13:34:18ID:???
post_idとか書かないといけないのでは。
referencesのとこはpostでも
0173nobodyさん2011/01/11(火) 18:35:17ID:???
しかしmigrationって、こうしてみると筋が悪いな・・・
0174nobodyさん2011/01/11(火) 23:21:57ID:???
rails3,ryby1.9.2で内部的にはUTF-8を使っています。
GETパラメータでsjisの文字列を渡すと
params[:key].blank?
でArgument Error となってしまいます。
params[:key].encode("utf-8").blank?
params[:key].force_encofing(“utf-8“).blank?
は試したのですが結果は変わりません。
どうすればよいのでしょう?
0175nobodyさん2011/01/11(火) 23:32:17ID:???
そのエラーを貼り付けましょう
0176nobodyさん2011/01/11(火) 23:47:34ID:EbNzEbCq
ArgumentErrorとは言っているから、あとはどこで出たか、だな。
できればエラーを引き起こしたArgumentの値も欲しいが。
01771742011/01/11(火) 23:52:59ID:???
>>175
すみません
エラーメッセージは以下です。

invalid byte sequence in UTF-8

activesupport (3.0.3) lib/active_support/core_ext/object/blank.rb:68:in `=~'


rails new test
でアプリ作成後、

application_controller.rb

class ApplicationController < ActionController::Base
protect_from_forgery
def index
warn params[:key].force_encoding("UTF-8").blank?
end
end

root.rb

root :to=>"application#index"

を記述し、
http://127.0.0.1:3000/?key=%83e%83X%83g
で再現します。


0178nobodyさん2011/01/12(水) 01:01:58ID:???
内部的にsjisを使う
または表もutf-8にする
0179nobodyさん2011/01/12(水) 08:55:08ID:PVfPMtkv
force_encodingはバイト列はいじらない。
間違いなくUTF-8が入っているけどアプリにはそれがわからない
という場合に使う。
とりあえずparams[:key] と params[:key].encoding を出力してみれば?

0180nobodyさん2011/01/12(水) 10:58:19ID:Jb3zJbvV
RailsはUTF-8を受け取る前提でつくられたフレームワークなせいか、
paramsを組み立てる途中で強制的にUTF-8エンコーディング情報を
付けてしまう(ActionDispatch::Http::Parameters)。

とりあえずは
key = params[:key].encode('UTF-8', 'Shift_JIS')
みたいにエンコードし直すのが手っ取り早い。
0181nobodyさん2011/01/12(水) 15:26:13ID:???
railsで特定のgemやpluginのmethodをoverrideしたいときはどうすれば良いでしょうか?
initializers配下で overrideの定義を書いたファイルをrequireするやり方だと、上手くいきません。
(initializers配下のファイルが読み込まれたあと、pluginのファイルが読み込まれるため?)
0182nobodyさん2011/01/12(水) 16:21:53ID:???
application.rbのconfig.after_initializeブロックの中でrequireすれば?
01831582011/01/12(水) 17:18:42ID:gnHL4Y+W
>168
http://www-jp.mysql.com/downloads/mysql/のサイトから
MySQL Community Server 5.5.8のMac OS X ver. 10.6 (x86, 64-bit), DMG Archiveをダウンロードしました。

>170
portで入れた方がいいんですか。
アドバイスありがとうございます。
0184nobodyさん2011/01/12(水) 17:29:17ID:???
>>183
あとはrubyのバージョンとrubyをどうやって入れたか。
同じような環境(mysqlはバイナリインストール、rubyはソースからインストール)だけど、全く問題出てないので。
01851582011/01/12(水) 18:35:35ID:gnHL4Y+W
>183
ruby1はmacにもともと入ってやつでバージョンは1.8.7です。
0186nobodyさん2011/01/12(水) 18:54:35ID:Jb3zJbvV
(OS付属の)ユニバーサルバイナリのRubyと
そうでないMysqlのライブラリって一緒に使えるのかな。
01871582011/01/12(水) 18:57:44ID:gnHL4Y+W
まさかのそういう問題なのかorz
一から入れ直してみようと思います。
みなさまいろいろ親切にありがとうございました!
0188nobodyさん2011/01/12(水) 22:10:57ID:???
>>182
返答ありがとうございます。
しかし、after_initializeの中でrequireしてもダメのようです。
困った。。。

ttp://stackoverflow.com/questions/4412018/rails-devise-how-to-render-login-page-without-a-layout
ここにあるAnswerの subclass を作るやり方のようにやりたいのですが。。。
0189nobodyさん2011/01/12(水) 22:53:11ID:PVfPMtkv
オーバーライドを行うファイルの先頭で、置き換えたい定義の入っている
ファイルをrequireしてしまってもダメ?
0190nobodyさん2011/01/13(木) 11:04:43ID:???
>>189
いけました! ありがとうございます!!
0191nobodyさん2011/01/13(木) 12:58:25ID:???
>>178-180
回答ありがとうございました。
結局一日調べて
actionpack-3.0.3/lib/action_dispatch/http/parameters.rb
74行目付近に
when String
value=NKF.nkf("-w",value)
value=value.force_encoding(Encoding::UTF_8) if
value.respond_to?(:force_encoding)
を追加したものを用意することで対応できました。
0192nobodyさん2011/01/14(金) 13:18:07ID:BgLvsnps
ruby 1.9.2p0 (2010-08-18) [i386-mingw32]、Rails 2.3.8を使ってます。
scaffoldを使ってモデルを作成した際、new.html.erbのform_forのtext_fieldに日本語を入力すると
incompatible character encodings: UTF-8 and ASCII-8BIT
というエラーが出ていました。
これはshow.html.erb、index.html.erbで.force_encoding 'UTF-8'としてエンコーディングすることで解決しました。
しかしながらフォームから値を入力する際に日本語を入力すると表示はできるのですが編集しようとした際にエラーが出ます。

Encoding::CompatibilityError in Events#edit
Showing app/views/events/edit.html.erb where line #13 raised:

incompatible character encodings: UTF-8 and ASCII-8BIT

Extracted source (around line #13):

10: <p>
11: <%= f.label :イベント名 %><br />
12: <%= f.text_area :event %>
13: </p>
14: <p>
15: <%= f.label :イベントの種類 %><br />
16: <%= f.text_field :subject %>

このような場合、どのような処理を行えばこのエラーは取れますか?
0193nobodyさん2011/01/14(金) 13:55:11ID:???
2.3系は1.9系の対応が不完全とアナウンスされていたような
きりないから、可能ならRails3.0.3にするかRuby1.8.7に変更した方がいいよ
0194nobodyさん2011/01/14(金) 14:03:41ID:???
そのviewファイルはutf8になってるの?
あと、htmlの指定でもutf8になってるんだろうか。
sjisが入力されてるような気がする
0195nobodyさん2011/01/14(金) 14:13:12ID:BgLvsnps
>>193
なるほど…。
やっぱりそこを変えたほうがいいのですね。

>>194
両方utf8になっていると思われます。
0196nobodyさん2011/01/14(金) 22:23:10ID:???
post と tag が多対多のとき group が邪魔です
Post.joins(:tags).where(['tags.name like ?', params[:q]]).group('post.id')
0197nobodyさん2011/01/14(金) 22:25:58ID:???
で?
0198nobodyさん2011/01/15(土) 00:23:08ID:???
しかもlikeとかw
0199nobodyさん2011/01/15(土) 08:49:55ID:???
たぶんこういうことだろう
post = Post.new(:title => 'あい')
post.tags.build(:name => '純愛')
post.tags.build(:name => '恋愛')
post.save

Post.joins(:tags).where(['tags.name like ?', '%愛%']) #=> 「あい」が2つ出る
02001922011/01/17(月) 00:57:31ID:eCmWyBLt
192で2.3系は1.9系の対応が不完全とアナウンスされていたから
Rails3.0.3にするかRuby1.8.7に変更した方がいいとアドバイスをもらったものです。

Railsを1.9.2でという約束なのでRailsのバージョンを変えました。
現在の環境はOSはWindows7で
ruby 1.9.2p0 (2010-08-18) [i386-mingw32],rails 3.0.3です。

form_forを使ってDBに値を格納し、index.html.erbやshow.html.erbで表示をすると
値がおかしいです。と、いいますのも、MySQLでselect文を使って表示してみると
きちんと、time型はtime型で、text型はtextで格納されているのですが
controllerで@event = Event.find(params[:id])とし、showやindexで <%=h @event.e_start %>
(e_startはtime型です)とするとfloat型の数値が表示され、text型のe_commmentを表示しようとすると
int型の0が表示されます。

原因がわからず困ってます。誰か知恵をください。お願いします。
0201nobodyさん2011/01/17(月) 01:10:44ID:???
ちなみに3系では <%=h の「h」はいらない
デフォルトでエスケープされる

mysqlのライブラリがおかしいとかじゃないのか?
ちゃんとmysql2使ってる?
02021922011/01/17(月) 03:47:43ID:eCmWyBLt
>>201
<%=h の「h」いらないんですね!自分何も知らなさすぎるorz

mysql2使ってます!
0203nobodyさん2011/01/17(月) 23:38:18ID:???
windowsについての質問って今までほとんど解決してないんだよなあ
ここにいる人のほとんどが使ってないだろうから
というわけで俺も力になれません
0204nobodyさん2011/01/17(月) 23:48:34ID:???
普通に使ってるが。
mysql2はdevkitが必要だと思うが入れたのか?
前にも書いたし勝手に解決してないことにするなよ。
0205nobodyさん2011/01/18(火) 19:11:55ID:???
AR で human sort って出来ますか?
データに関してはRDBに丸投げですか?
0206nobodyさん2011/01/20(木) 01:29:44ID:???
RoRはぶっちゃけもう終わったと思います。
0207nobodyさん2011/01/20(木) 02:19:35ID:???
始まってもいなかった
0208nobodyさん2011/01/20(木) 17:05:05ID:???
PHPフレームワークを使う → やっぱり優秀ではなかった → RoRを使う → やっぱりダメだった

→ Tomcat+javaにしてみた → これが正解だと思った
0209nobodyさん2011/01/20(木) 17:16:00ID:SSKhJITE
JavaからRubyへ ―マネージャのための実践移行ガイド
http://www.amazon.co.jp/gp/product/4873113202

0210nobodyさん2011/01/20(木) 17:16:13ID:???
Tomcatはフレームワークではなく、ソフトウェアの名前。
これに相当するのはRailsで言えばPassenger。

多少でも分かっていれば、こんなバカな間違いはしない。
またいつも荒らしてる勉強会の出席者?
0211nobodyさん2011/01/20(木) 17:30:50ID:???
ひょっとこしてアスペ?
0212nobodyさん2011/01/20(木) 17:57:49ID:???
そういえばぽろっとバレたやつがいたな
0213nobodyさん2011/01/21(金) 04:07:57ID:???
最近のJavaのフレームワークってどんな感じになってるの?
0214nobodyさん2011/01/21(金) 07:36:26ID:???
ここはrailsスレだよ、あんぽんたん
0215nobodyさん2011/01/21(金) 08:33:12ID:???
JRuby on Rails
0216nobodyさん2011/01/21(金) 12:46:05ID:???
それが次の勉強会のテーマ?
0217nobodyさん2011/01/22(土) 03:04:07ID:a6Nv7f5X
http://status.heroku.com.zurukko.jp/incident/115
0218nobodyさん2011/01/23(日) 12:04:05ID:???
ここはSQLチューングは上級者テクニックだと思ってる
低脳ばかりだからしょうがないよ^^

たとえばMySQLならexplainで実行計画を確認するのは
初心者が一番初めに覚えるべき基本だろ。

基本をはずしたヤツが開発したWebアプリはサイトがヒットした瞬間、
「トップページも表示されません」「今日は売り上げがゼロでした」という
間抜けなことになる(笑

こんなこと言っても、ここの連中には馬の耳に念仏だろうけどね(笑
まぁ 生まれつき低脳だから仕方ない^^

なんていうか、向上心が無い。知識が狭くて浅いが、本人には自覚が無いのでたちが悪い。
0219nobodyさん2011/01/23(日) 12:54:43ID:???
いきなりどうした
ママに怒られたか
0220nobodyさん2011/01/23(日) 20:39:24ID:???
どんな高級言語やフレームワークを使おうとも、その裏でどういうロジックで動いているかを
考えるのは当たり前のこと
Rails で間抜けな SQL を発行している人間は Java を使っても間抜けなコーディングになるだけ
0221nobodyさん2011/01/23(日) 21:03:33ID:???
SQL で間抜けな filesort を発行している人間は COBL を使っても間抜けなコーディングになるだけ
0222nobodyさん2011/01/24(月) 00:32:29ID:???
create_table :hoges do |t|
t.text :data
end

class Hoge < ActiveRecord::Base
def hoge
puts "*A* data = #{data.inspect}"
data = "fuga" if false
puts "*B* data = #{data.inspect}"
end
end

Hoge.create!(:data => "hoge")

で Hoge.first.hoge すると
*A* data = "hoge"
*B* data = nil
となるのは、なぜ? 両方 "hoge" になるべきだと思うんだけど。
Rails 3.0.3 + Ruby 1.9.0p0 でも Rails 2.3.5 + Ruby 1.8.7 でも同様。
0223nobodyさん2011/01/24(月) 00:57:19ID:???
君が同名のローカル変数を作ってしまったからだ
Rails関係ないから初心者スレに行くといい
0224nobodyさん2011/01/24(月) 04:21:21ID:???
あう、if false な状況でもローカル変数が作られるとはまったく想像もしてなかった。
0225nobodyさん2011/01/24(月) 08:21:35ID:???
代入メソッドはself使えってMatzがいつも言ってるだろ
0226nobodyさん2011/01/24(月) 16:22:48ID:???
require 'rubygems'
require 'active_support/all'
module M
def self.included(base)
base.class_eval do
class_inheritable_accessor :a
self.a = 1
end
end
end
p Class.new.send(:include, M).new.a # => 1
p Class.new{include M}.new.a # => nil ← !?
0227nobodyさん2011/01/24(月) 16:58:51ID:???

  初 心 者 ス レ に い け
0228nobodyさん2011/01/24(月) 17:10:48ID:???
p Class.new.instance_eval{include M}.new.a # => 1
0229nobodyさん2011/01/24(月) 17:19:15ID:???
>>226
1.9 だと 1 になるな
0230nobodyさん2011/01/25(火) 15:35:25ID:???
Memcachedベースのsesson_store を利用している場合に
session_id から session を復元する方法はありませんか?
(Rails3+Dalli です)

ActiveRecordベースの場合、以下のようにして復元できたのですが。。。
session = ActiveRecord::SessionStore::Session.find_by_session_id(session_id)
0231nobodyさん2011/01/25(火) 17:12:30ID:yu47GaxV
>>230

うちはまだ Dali でも Rails3 でもないけど、cache をストアに使っている
MemCache クラスのインスタンスだとすれば、cache["session:#{session_id}"]
で取れてる。
memcache上のキー自体は #{namespace}:session:#{session_id} になっている。
02322302011/01/25(火) 20:00:15ID:???
>>231
返答ありがとうございます。
以下のやり方でいけました。

session = Dalli::Client.new('localhost:11211').get("rack:session:#{session_id]}")

デシリアライズまで透過的にやってくれるのはありがたいのですが、
memcacheのクライアントをリクエストのたびに毎回生成してしまうやり方なので、
負荷的によろしくなさそうなのが何とも。何か良い方法はないものかな。

Rails.cache.fetch(session_id) とかで取れれば、楽なんですがねぇ。
0233nobodyさん2011/01/25(火) 20:44:25ID:F3Uu324/
ActionController::Base.session_options[:cache] あたりに
入ってなかった?
02342302011/01/25(火) 22:13:27ID:???
2.xまでは

CACHE = MemCache.new memcache_options
CACHE.servers = 'localhost:11211'
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE

という感じで、memcacheクライアントの実態が入っていたようです。
3.xからは、ActionController::Base.session_options が request.session_optionsに移動して
:cache もなくなってしまった感じっぽいです(Rails.cache?)。
0235nobodyさん2011/01/27(木) 02:20:28ID:8vsS5446
http://b.hatena.ne.jp/entry/japan.cnet.com/news/business/20425484/
【ネット/料理】「年内にクックパッド抜く」 楽天レシピ、急成長
http://toki.2ch.net/test/read.cgi/wildplus/1296032687/
0236akiyan2011/01/28(金) 23:35:53ID:???
cakePHPにできないことは無いし
0237nobodyさん2011/01/29(土) 02:50:04ID:ioBbPtI8
結局クックパッドは楽天レシピに抜かれる弱肉強食WEB - invizi
http://invizi.net/subject:58

[クックパッド][cookpad][ruby][rails][楽天]
0238nobodyさん2011/01/29(土) 02:51:19ID:ioBbPtI8
メディアの存続にとって必要なのは「金」か「カルチャー」か - invizi
http://invizi.net/subject:60
0239nobodyさん2011/01/29(土) 13:25:51ID:???
RailsでMySQLを使っているときのトランザクションについて教えてください。

Book.transaction do
処理1
処理2
end

このようなコードを書いた場合、
処理1と処理2がいずれも実行されるか、いずれも実行されないか
を保障するというのは理解できるのですが、
処理1と処理2の間に別プロセスがBookテーブルに変更を加えてしまうことはあり得ますか?

具体的には、Bookテーブルにcountというカラムがありまして
この本を保持する人の人数を保持しています。
ユーザーからのあるアクションによって、複数のbookのcountを更新する必要があるのですが、
Aさんが更新中にBさんが更新してしまうと整合性が取れなくなってしまう問題に当たっています。

この更新処理を上のコードのトランザクションで囲めば解決されるのでしょうか?
0240nobodyさん2011/01/29(土) 13:35:21ID:???
質問させてください。携帯サイトの開発をしています
rails3+jpmobile環境なのですが、jpmobileのconfig.jpmobile.mobile_filter をオンにした状態化で
swfファイルを send_file or send_data すると jpmobile のフィルタの影響で不正な swf ファイルが送信されてしまいます
なんとか、mobile_filter をオンにしつつ、正常な swf ファイルを送信する方法はないでしょうか?
0241nobodyさん2011/01/29(土) 14:10:00ID:???
railsの設定ではなくて、MySQLのトランザクションレベルによる。

ttp://dev.mysql.com/doc/refman/5.1/ja/innodb-transaction-isolation.html

InnoDB使ってるだろうから、デフォルトの REPEATABLE READ だと思われる。

結論からいうと、Bookテーブルは別のプロセスから変更を受けうる。
ただし、Bookテーブル内のロックされた行は
別プロセスから変更を受けないことが保証される。
テーブルレベルのロックと行レベルのロックの違いを汁。

Aさんが行1,2を更新している間は、Bさんは行1,2のコミットが終わるまでは、
UPDATEやDELETEはもちろん、SELECT文での読み取りも不可能になる。
ただし、Aさんがそのトランザクション中に更新しないとMySQLが判断した
行3なんかがあたとしたら、Bさんは行3に関しては読み取り・更新が出来る。

書き方が変だと、トランザクションはったつもりでも
レースコンディションが起こるので注意。
ttp://d.hatena.ne.jp/LukeSilvia/20100130/p1
0242nobodyさん2011/01/29(土) 14:15:42ID:???
>>239
>具体的には・・・
を見ると、行ロックでググると良いと思う
02432402011/01/29(土) 14:17:43ID:???
一応?自己解決しました。

lib/jpmobile/mobile/docomo.rb 
をいじって、SJISへのコンバート処理をコメントアウトし、必ずUTF8を使うようにしたところ
問題が起こらなくなりました。

あまりよくない方法の気もするので、もっと良い解決策があったらご教授お願いします m( _ _ )m
0244nobodyさん2011/01/29(土) 15:13:12ID:XpJ1rxWJ
>>240
ソース見て見たけど、mobile_filterってonlyとかexceptオプション認識しないのな…
swfを返すとこだけ別コントローラにして、mobile_filterをそれ以外に書く、
で回避できぬ?

02452392011/01/29(土) 16:47:50ID:???
>>241
>>242

分かり易い説明ありがとうございます。
トランザクションとロックの関係が分かっていなかったので混乱していました。
トランザクション中に更新されうる行をMySQLが判断してロックをかけてくれる、
というところでスッキリしました。

ただ、以下の点については

>Aさんが行1,2を更新している間は、Bさんは行1,2のコミットが終わるまでは、
>UPDATEやDELETEはもちろん、SELECT文での読み取りも不可能になる。

SELECT文はロックをかけないのでAさんが更新中でもBさんはSELECT可能なのではないですか?
もしSELECTも不可能になるのであれば何も心配無いのですが、
SELECTが可能なのであればBさんの更新でAさんの更新が消えてしまいます。

見当違いなことを言っていたらすいません。
0246nobodyさん2011/01/29(土) 17:08:16ID:???
> トランザクション中に更新されうる行をMySQLが判断してロックをかけてくれる、

何を言いたいのか意味不だがトランザクションで複数のSQL文をまとめたところでロックをかけるのはSQL単体レベルってのは理解してる?
■ このスレッドは過去ログ倉庫に格納されています