【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/
0223nobodyさん
2011/01/24(月) 00:57:19ID:???Rails関係ないから初心者スレに行くといい
0224nobodyさん
2011/01/24(月) 04:21:21ID:???0225nobodyさん
2011/01/24(月) 08:21:35ID:???0226nobodyさん
2011/01/24(月) 16:22:48ID:???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:???0230nobodyさん
2011/01/25(火) 15:35:25ID:???session_id から session を復元する方法はありませんか?
(Rails3+Dalli です)
ActiveRecordベースの場合、以下のようにして復元できたのですが。。。
session = ActiveRecord::SessionStore::Session.find_by_session_id(session_id)
0231nobodyさん
2011/01/25(火) 17:12:30ID:yu47GaxVうちはまだ Dali でも Rails3 でもないけど、cache をストアに使っている
MemCache クラスのインスタンスだとすれば、cache["session:#{session_id}"]
で取れてる。
memcache上のキー自体は #{namespace}:session:#{session_id} になっている。
0232230
2011/01/25(火) 20:00:15ID:???返答ありがとうございます。
以下のやり方でいけました。
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/入ってなかった?
0234230
2011/01/25(火) 22:13:27ID:???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://toki.2ch.net/test/read.cgi/wildplus/1296032687/
0236akiyan
2011/01/28(金) 23:35:53ID:???0237nobodyさん
2011/01/29(土) 02:50:04ID:ioBbPtI8http://invizi.net/subject:58
[クックパッド][cookpad][ruby][rails][楽天]
0238nobodyさん
2011/01/29(土) 02:51:19ID:ioBbPtI8http://invizi.net/subject:60
0239nobodyさん
2011/01/29(土) 13:25:51ID:???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:???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
0243240
2011/01/29(土) 14:17:43ID:???lib/jpmobile/mobile/docomo.rb
をいじって、SJISへのコンバート処理をコメントアウトし、必ずUTF8を使うようにしたところ
問題が起こらなくなりました。
あまりよくない方法の気もするので、もっと良い解決策があったらご教授お願いします m( _ _ )m
0244nobodyさん
2011/01/29(土) 15:13:12ID:XpJ1rxWJソース見て見たけど、mobile_filterってonlyとかexceptオプション認識しないのな…
swfを返すとこだけ別コントローラにして、mobile_filterをそれ以外に書く、
で回避できぬ?
0245239
2011/01/29(土) 16:47:50ID:???>>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:???何を言いたいのか意味不だがトランザクションで複数のSQL文をまとめたところでロックをかけるのはSQL単体レベルってのは理解してる?
0247nobodyさん
2011/01/29(土) 17:43:34ID:???BさんがSELECT実行するのは可能だが
コミット前のAさんの変更分をBさんがSELECTで読み取ることは出来ない
って意味だろ
0248nobodyさん
2011/01/29(土) 18:09:46ID:???それはトランザクションとは言わない。
0249nobodyさん
2011/01/30(日) 00:50:26ID:YHMQGBGnこのプラグインを活用することで、高速開発が可能です。
http://1-byte.jp/2011/01/06/open_trivist/
0250nobodyさん
2011/01/30(日) 09:12:32ID:???http://journal.mycom.co.jp/news/2011/01/28/061/index.html
使ってるんだが、Oracle・・・
0251akiyan
2011/01/30(日) 12:16:54ID:???radrails久しぶりに使ってみよう
0252nobodyさん
2011/01/30(日) 16:03:53ID:???radrailsの技術者がaptanaに引き抜かれたけど、
IDEの開発じゃなくて別の仕事に割り当てられてるって
以前どこかのサイトで見たぞ。
0253nobodyさん
2011/01/30(日) 21:04:11ID:???0254nobodyさん
2011/01/30(日) 23:13:14ID:APKrEmun0255nobodyさん
2011/01/31(月) 03:41:59ID:???0256nobodyさん
2011/01/31(月) 08:46:15ID:Rhe/MGsRhttp://netbeans.org/community/news/show/1507.html
based on existing low usage trends we are unable to justify the continued
allocation of resources to support the feature.
0257nobodyさん
2011/01/31(月) 09:05:55ID:???0258nobodyさん
2011/01/31(月) 10:58:50ID:???これを
<%= link_to @post %>
と書けるヘルパーありませんか?
0259nobodyさん
2011/01/31(月) 11:43:09ID:???0260nobodyさん
2011/01/31(月) 13:50:56ID:???def link_text
self[:title] || self[:name]
end
#helper
def link(obj)
link_to obj.link_text, obj
end
0261nobodyさん
2011/02/01(火) 00:24:55ID:yP2kD8Vl参考になりそうなサンプルないでしょうか
0262nobodyさん
2011/02/01(火) 11:25:53ID:lrZ+99HCSyntax Highlight
http://ruby-toolbox.com/categories/syntax_highlighting.html
CRM Apps
http://ruby-toolbox.com/categories/crm_apps.html
E-Commerce
http://ruby-toolbox.com/categories/e_commerce.html
0263nobodyさん
2011/02/01(火) 18:28:26ID:???以下のようにクラスメソッドとして、scopeを呼び出すと意図した通りに動きます。
scope male, where(:sex => 1)
User.male
しかし、インスタンスメソッドとして呼び出すと、
そんなメソッドは無い、と怒られます。
u = User.all
u.all.male
NoMethodError: undefined method `male' for #<User:0xa41ae74>
scopeをインスタンスメソッドとして呼び出す方法はないのでしょうか?
0264nobodyさん
2011/02/01(火) 18:53:45ID:gX/bMisP0265nobodyさん
2011/02/01(火) 20:27:21ID:???ちなみにallが返すのはArrayな。
0266nobodyさん
2011/02/01(火) 21:51:18ID:???十分意味があると思う
0267nobodyさん
2011/02/01(火) 22:20:26ID:???思うことはある。 User#male? とか別途用意するの面倒。
0268nobodyさん
2011/02/01(火) 22:27:21ID:ikyFKs3wu はUserのインスタンスの配列であってUserのインスタンスではないぞ。
0269nobodyさん
2011/02/01(火) 22:31:18ID:???普通にできるけど^^;
0270nobodyさん
2011/02/01(火) 22:35:51ID:ikyFKs3w0271nobodyさん
2011/02/02(水) 02:35:39ID:???Railsを1週間ほど前から使い始めました。
初級者本を読んで何とか自分でTODOアプリ的なものを作れるようになりました。
0272nobodyさん
2011/02/02(水) 05:41:57ID:???0274nobodyさん
2011/02/02(水) 22:16:10ID:QKkorMRK??
0275nobodyさん
2011/02/03(木) 08:46:30ID:???> User.where('18 > ?', :age).male
>
> 普通にできるけど^^;
クラスメソッドとインスタンスメソッドを
混同しているようだ。
0276nobodyさん
2011/02/03(木) 20:50:46ID:???0277nobodyさん
2011/02/03(木) 21:36:49ID:???0278nobodyさん
2011/02/04(金) 02:35:49ID:???デザイナーさんとの協業が大変すぎるので
いい方法を探してます。
0279nobodyさん
2011/02/04(金) 08:46:49ID:2Ew9ESxwRails から使えるようにする方法はあるのかわからん。
0280nobodyさん
2011/02/04(金) 17:22:59ID:???パフォーマンスに違いがあったりするのでしょうか。
内部的に、mapの方は並列化して処理できるから早いとか。
0282nobodyさん
2011/02/04(金) 20:17:28ID:???つまり同じです
0283nobodyさん
2011/02/05(土) 21:02:57ID:DexYYH6tpublic/image/***.jpgに画像を置いてるんですがファイルが存在しないときroutesを通さず404を返すにはどうすればいいですか?
0284nobodyさん
2011/02/05(土) 21:49:10ID:GPb9IKNiRewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ¥.jpg$ [R=404]
みたいな(未確認)
0285nobodyさん
2011/02/06(日) 04:04:42ID:???0286nobodyさん
2011/02/06(日) 09:42:56ID:???0287nobodyさん
2011/02/06(日) 12:25:14ID:???特に複数人でのプロジェクト
0288nobodyさん
2011/02/06(日) 12:54:13ID:???0290nobodyさん
2011/02/06(日) 18:38:48ID:???0292nobodyさん
2011/02/06(日) 21:29:00ID:???マージがめんどくさくなりそうな気がする
0293nobodyさん
2011/02/06(日) 21:44:27ID:???でググったら幸せになれるかもだよ
0294nobodyさん
2011/02/06(日) 21:45:23ID:???0295nobodyさん
2011/02/06(日) 21:59:05ID:???DB変更する時は突然マイグレーションファイルアップするのではなく、口頭でメンバーに伝えて情報共有する。
既存のマイグレーションファイルはいじらない。
rollbackでちゃんと元に戻るように記述しておく。
このぐらいを気をつけていれば何も問題ない。
0296akiyan
2011/02/07(月) 02:06:53ID:???それって結局migrateとバージョン管理に頼らず口頭で管理してるってことになりませんか
5人規模のプロジェクトならいいけれど中華人民共和国の人口は13億ですよ 口頭で管理したら破綻しませんか
0297nobodyさん
2011/02/07(月) 02:14:37ID:QPqcOi6Pなんでそうなるの?
議論を経て仕様変更についての知識を共有した上で、
変更自体はマイグレーションファイルを作ってやってるわけでしょ?
0298nobodyさん
2011/02/07(月) 02:38:22ID:???これはRailsが裏で何かやってるんですかね?
membersテーブルにnameというカラムがあるとします。
class Member < ActiveRecord::Base
def mthd
name = 'Suzuki'
end
mthdを呼んでも何故かnameはローカル変数ではなくセッターとして認識される。
0300nobodyさん
2011/02/07(月) 19:14:00ID:???これを防ぐ方法はないのでしょうか。
0301nobodyさん
2011/02/07(月) 20:26:45ID:???0302nobodyさん
2011/02/07(月) 21:37:50ID:???pluginのバージョンが変わってしまうと結局 危ないので freeze する方法が知りたいのです。
0303nobodyさん
2011/02/07(月) 21:59:32ID:QPqcOi6P自分とこにgitリポジトリ作って、それを参照する。
0304nobodyさん
2011/02/08(火) 00:10:06ID:???差分を書いてソースを生成するなんて阿呆かと思うが、それはさておき。
マイグレーションファイルをいじっていいのはコミットするまでだ。
0305nobodyさん
2011/02/08(火) 13:48:47ID:???0307nobodyさん
2011/02/08(火) 15:59:11ID:???aptから標準で入るrailsが2.2なんだけど
rails -v とかのオプションとか効かくてどうなってるのか分からないし
gem installしても必要なパッケージが全部入らないし
aptでredmine入れても標準と構成とか違うっぽいし
rails難しすぎる
0308nobodyさん
2011/02/08(火) 16:36:03ID:???なるほど、でもubuntuは半年毎のリリースをやってる割には、Canonicalが
直接アップデートしているパッケージ以外は結構古いし、まんまベースにした
debianのパッケージが入ってたりする。
aptじゃなくてSynapticでインストールすると推奨パッケージとか提案パッケー
ジとかがすぐ分かって便利だよ。
後、野良パッケージとか言って嫌う人もいるけど各パッケージの最新版を出し
てくれてる人達がいるんだけど、例えばrails絡みだと
ttps://launchpad.net/~ubuntu-on-rails/+archive/ppa
とかね。まあ、俺はLTSからLTSに移って行く口なんでubuntuで最新を追っか
けるのも良し悪しだと思うけど、大抵は xxx ppa (xxxは探したい物の名前)とか
でググると結構出てくるよ。
0309nobodyさん
2011/02/08(火) 17:23:20ID:???gemがあるものは、gemで入れた方がいい。
ディストリビュータはgemがあるものまでパッケージを提供しようとせず、
ruby本体とrubygemsを更新してくれるだけにすれば混乱しないんだけどね。
gemは変化が激しいから、ディストリビュータ毎に提供するのは無理がある。
0310nobodyさん
2011/02/08(火) 18:33:41ID:0YpYbnaYソースからインストールしたソフトをパッケージ管理してくれるありがたいソフト
http://www.daokaous.com/2010/01/ubuntu%E3%81%A7rails%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%EF%BD%9Eubuntu9-10%E6%94%B9%E8%A8%82%E7%89%88%EF%BD%9E/
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
tar zxvf rubygems-1.3.5
cd rubygems-1.3.5
sudo paco -D ruby setup.rb
0311nobodyさん
2011/02/08(火) 20:34:45ID:???他のRailsを使ったアプリのパッケージとバージョン合わせないといけないし、かなり無理があるんだよなー
Redmineをaptで入れて、Rails3をRuby1.9を使いたいときにaptではどうするの?と思ってしまう
依存gemはどうするのとか、それらが動くようにPassenger(Unicornでもいいけど)を調整するのかなり大変じゃないかとか
0312nobodyさん
2011/02/08(火) 20:41:42ID:0YpYbnaYhttp://curiosity-drives.me/programming/rails/rvm_ruby_rails/
複数のRubyを切り替えて使う「pik」
http://www.moongift.jp/2010/02/pik/
0313nobodyさん
2011/02/09(水) 00:02:11ID:2EhmOugw0314nobodyさん
2011/02/09(水) 00:03:32ID:pGh2UmwF0315akiyan
2011/02/09(水) 00:30:59ID:???え?じゃあCentOSなら簡単だと思うの?
スキル不足を棚にあげてOSのせいにする人って久しぶりに見たわー
三年ぶりぐらいやわー
0316nobodyさん
2011/02/09(水) 14:29:18ID:???0317nobodyさん
2011/02/10(木) 21:21:49ID:???consoleを二つ開いて、
片方で
Rails.cache.write("hoge", "hogehoge")
とやり、もう片方で
Rails.cache.read("hoge")
とやると読み出せるのですが
Rails.cache.write("hoge", User.new)
とmodelオブジェクトを書きこむと、同一コンソール内では
Rails.cache.read("hoge")
でUserオブジェクトが読み出せるのですが、
もう一つのコンソールで読みだそうとすると
nil が戻ってきてしまいます。
ネットにあるいくつかの例をみるとシリアライズなしで
cacheに突っ込んでいるように見えるのですが。。。
0318nobodyさん
2011/02/16(水) 13:54:46ID:???名前を忘れてしまいました
知っている人がいたらおしえてくださいまし
0319nobodyさん
2011/02/16(水) 18:41:56ID:gaqY8R20http://d.hatena.ne.jp/tkng/20080811/1218442298
SpecialWarningというプラグイン
http://d.hatena.ne.jp/authorNari/20090205/1233840189
N+1問題などを監視してパフォーマンスを改善するRailsプラグインBullet
http://blog.digital-squad.net/article/149685338.html
Ruby on Railsのパフォーマンス向上に関する10のtips
http://blog.tkmr.org/tatsuya/show/268-ruby-on-rails-10-tips
findメソッドはパワフルだけど基本SELECT * FROMなので場合によっては:selectで必要なカラムだけ読み込む、また:limitや:offsetを活用する
ごくごく基本的な Ruby on Rails のパフォーマンスチューニング
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20071114
:conditions オプションでキーに使われるようなカラムにはインデックスを作成すべし
:selectで取得するカラムを絞ったらパフォーマンスが倍に
http://brass.to/blog/active_record_select_option.html
レコード件数は110万件くらい
カラム数は30程度
インデックスは効いている(explainで確認済み)
Rails で MySQL を使うときの注意点 | METAREAL
http://www.metareal.org/2007/07/24/notes-on-rubyonrails-with-mysql/
SQL を二段階に分けるといい
まず、最初の SQL でレコードの ID だけを SELECT する(int だけなので、このときの一時テーブルはメモリ上に作られる)
次に、その ID で必要な TEXT や BLOB を SELECT するんだ(これは ID による単純な検索なので一時テーブルは使われない)
これを知っておかないと、MySQLサーバの再起動でDBデータの不整合が発生するかもしれません! - よかろうもん!
http://d.hatena.ne.jp/interu/20100817/1282041840
0320nobodyさん
2011/02/16(水) 19:10:43ID:???0321nobodyさん
2011/02/16(水) 20:57:49ID:???0322nobodyさん
2011/02/17(木) 15:20:22ID:xNvbHaM3のですが可能でしょうか?
Rubyは日本語が3byteで表現されているようなので、単純に40byteで制限すると日本語が短くなってしまいます。
環境は、
Ruby1.8.7
Rails2.3.2
を使っています。
■ このスレッドは過去ログ倉庫に格納されています