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

【RoR】Ruby on Rails Part16

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2013/01/31(木) 08:07:31.27ID:GGHiBszv
前
http://kohada.2ch.net/test/read.cgi/php/1341589839/
http://unkar.org/r/php/1341589839

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

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

http://doc.ruby-lang.org/ja/1.9.3/doc/index.html
0892nobodyさん2013/10/15(火) 19:56:24.58ID:hUiiEC+A
[ANN] Rails 3.2.15.rc3 has been released!
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/411331
0893nobodyさん2013/10/15(火) 20:48:05.43ID:hUiiEC+A
Amazon.co.jp: Remote: Office Not Required:
Jason Fried, David Heinemeier Hansson: 洋書
http://www.amazon.co.jp/gp/product/0804137501
0894あ2013/10/16(水) 06:53:25.24ID:lbEgPcdo
Re: [ANN] Rails 3.2.15.rc3 has been released!
Just an update, this rc seems fine, but I don't have my ducks in a row
for the release today. I'll push 3.2.15 tomorrow morning! :-)
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/411416
0895あ2013/10/16(水) 11:20:18.32ID:lbEgPcdo
インターネットはからっぽの洞窟
http://www.amazon.co.jp/gp/product/4794207433
0896あ2013/10/16(水) 11:21:46.35ID:lbEgPcdo
Ruby is a dying language.
Rubyは死にかけ言語です。
http://rubini.us/2013/10/15/introducing-rubinius-x/

翻訳
http://translate.google.co.jp/
0897nobodyさん2013/10/16(水) 11:36:37.37ID:lbEgPcdo
Ruby is a dying language (?) : programming
http://www.reddit.com/r/programming/comments/1oi8wd/ruby_is_a_dying_language/

Introducing Rubinius X | Hacker News
https://news.ycombinator.com/item?id=6553767
0898nobodyさん2013/10/16(水) 11:47:54.90ID:???
mixiのような会員制サイトを作りました。

会員がページ遷移する度に会員のログイン日時が更新されるようにしてます(秒単位)

仮に100人がログインしていたとして、それぞれがいろんなページを遷移したとしたら、かなりの勢いでデータベース(ログイン日時)の読み込みと書き込みが頻繁に行われます。

こういった構造は通常ではありえないでしょうか?

たった20〜30人ほどが閲覧してるだけのようなのですが、サイトが固まってしまいます。

タスクパフォーマンスを見るとApacheが沢山発生していて、それぞれがそこそこメモリを食ってるようです。

仕方なくアパッチを再起動すると直りますが…

それともサーバーのメモリが1GBだと少なすぎますか?
Rails3.2、Apache2、Passengerを使用しています。

Apacheに以下のようにPassengerの設定をしています

PassengerMaxPoolSize 30
PassengerPoolIdleTime 1200

何が原因になってフリーズしてしまうのか原因を特定したいのですが何かいい方法はありますでしょうか?
0899nobodyさん2013/10/16(水) 12:17:32.78ID:???
>>898
Passenger使ってないからメモリの問題はわからんけど
redisくらいの書き込み性能を持つデータベースなら毎回更新させても問題ない
ただログイン情報を持つようなテーブルを毎回更新させるとクエリキャッシュが全く効かなくなるから
更新日時は別のテーブルに分離したほうがいい
0900nobodyさん2013/10/16(水) 12:24:57.56ID:???
>>899
redisは使っておらずデータベースはMySQLです

更新日時のカラムはUserテーブルに設けています。
これは問題ですか?

関連テーブルにおいたほうがいい?
0901nobodyさん2013/10/16(水) 12:29:19.92ID:???
>>900
MySQLは更新が遅いからパフォーマンスへの影響が大きすぎる
状況によって異なるけどredisはオンメモリだからMySQLの100倍くらい高速

Userテーブルはログインチェック等で頻繁に読み込むのに毎回更新すると
MySQL側でキャッシュが毎回削除されて、パフォーマンスが落ちる
0902nobodyさん2013/10/16(水) 12:36:17.81ID:???
>>901
非常に参考になります
ありがとうございます

ログイン日時カラムは別テーブルに移した方がよさそうですね。


ページ遷移ごとにUserのログイン日時カラムを更新すると、たかだか20〜30人程度を捌くのも困難なのでしょうか?

Railsってそんなもんなのでしょうか?

私の見解ではRedisはmemcachedのようなものと把握しているんですが
ここからどういうふうにデータベースに反映させて、他のユーザーに最新の情報(他人の最新ログイン日時情報)を見せられるでしょうか?
0903nobodyさん2013/10/16(水) 12:40:02.74ID:???
>>902
タスクマネージャーでApacheが大量発生してるならPassengerの問題のように感じるけど
仮にアプリケーションが問題だとしたらRailsというよりもActiveRecordの問題だから
ARを経由せずに生のSQL書けば幾分解消される可能性がなくはないはず

RedisはRailsからActiveRecordのように使えるライブラリがあるから
ほとんどMySQLと差異なく使用できるはず
0904nobodyさん2013/10/16(水) 13:11:30.25ID:lbEgPcdo
一秒は1000ms

シーク時間はシーク範囲によって異なりますが、仮に 5ms とした場合、並列でI/Oを出せない IDE では 200 IOPS が限界となります。
http://pc.casey.jp/archives/153904156

http://e-words.jp/w/IOPS.html  

水道管の値段と水の流量を考える。
太い水道管を用いるとたくさんの水が流せるが、水道管の重量が増えるため水道管に必要な費用が大きくなる。
逆に水道管を細くすると重量の軽い水道管になるので水道管に必要な費用は少なくて済むが、少ない量の水しか流せなくなる。
このように、水量の多さを重視すると費用が犠牲になり、費用の安さを重視すると流せる水の量が犠牲になるという関係にあり、
流せる水量の多さと費用の安さはトレードオフの関係にある。
http://ja.wikipedia.org/wiki/トレードオフ
0905nobodyさん2013/10/16(水) 13:13:07.23ID:lbEgPcdo
ioDriveは10万IOPS、SSDも3.6万IOPSほどでした。
ハードディスクでは数百から千ぐらいのIOPS
http://internet.watch.impress.co.jp/docs/special/20120731_549042.html

まさに怪物! Fusion-ioが容量10テラバイト/性能130万IOPSのフラッシュドライブ「ioDrive Octal」発表 − Publickey
http://www.publickey1.jp/blog/11/_fusion-io10130iopsiodrive_octal.html

IOPSは、ディスクが1秒当たりに処理できるI/Oアクセスの数である。
IOPSが高ければ高いほど、高性能なディスクと言える。
http://itpro.nikkeibp.co.jp/article/lecture/20070104/258117/

Fusion-io、10億IOPSの新技術「Auto Commit Memory」発表。ストレージなんてレベルじゃない、パーシステントなメモリだ − Publickey
http://www.publickey1.jp/blog/12/fusion-io10iopsauto_commit_memory.html
0906nobodyさん2013/10/16(水) 14:19:26.71ID:???
>>902
Rails の問題というより、アプリケーション設計の問題のような…
0907nobodyさん2013/10/16(水) 14:37:01.72ID:lbEgPcdo
Fusion-ioのCEOに直接聞いた、フラッシュドライブの破壊的な能力と仕組み、そして将来 − Publickey

フラッシュストレージはサーバの能力を劇的に向上させます。
例えばニコニコ動画を運営するドワンゴでは、動画のキャッシングサーバの台数を4分の1にしました。
ミクシィは、数百台あったデータベースサーバを数十台近くまで、約10分の1に減らしました。
ドリコムではクエリ処理が20倍高速になり、サーバ台数が4分の1に削減されました。
そのほかにも多くのお客様がいますが、特にFacebookとAppleは大口顧客で、実に売り上げの半分以上を占めています。
http://www.publickey1.jp/blog/12/fusion-ioceo.html
0908nobodyさん2013/10/16(水) 14:45:31.24ID:lbEgPcdo
Fusion-io ioDrive の“非公式”標準価格/販売価格表
http://hesonogoma.com/hardware/fusion-io_iodrive_pricelist_2012.html
0909nobodyさん2013/10/16(水) 15:10:14.13ID:lbEgPcdo
さくらインターネットVPSのIOPSが
http://pc.casey.jp/archives/153904156
0910nobodyさん2013/10/16(水) 17:36:40.90ID:???
>>903
普通はApacheは1つしか発生しないものなんでしょうか?

Redisの導入って容易ですか?
Passengerみたいなものなんでしょうか?それともmemcached?
0911nobodyさん2013/10/16(水) 17:37:33.63ID:???
>>906
ログイン日時カラムをUserテーブルに追加しただけで
重くなってしまうものなんでしょうか?
0912nobodyさん2013/10/16(水) 17:38:47.19ID:???
>>910
> Redisの導入って容易ですか?
それぐらいやってみろよ…

> ログイン日時カラムをUserテーブルに追加しただけで
> 重くなってしまうものなんでしょうか?
自分で試して比較すりゃすぐに分かることをなぜ聞く…
0913nobodyさん2013/10/16(水) 18:16:18.91ID:???
>>912
すみません。試してみます。

ちなみにこれがさきほど話したメモリの使用状況です。
Apacheが大量発生しています。
なにがボトルネックになってこうなってしまうのか原因特定の方法さえ分かればいいのですが…

http://i.imgur.com/5epASMT.png
0914nobodyさん2013/10/16(水) 18:18:06.59ID:???
>>898
Suppose you have 1 GB of RAM and lots of blocking I/O, and you’re on a purely single-threaded multi-process deployment.
Conclusion: you should use 7 or 8 processes. Phusion Passenger should be configured as follows:
http://blog.phusion.nl/2013/03/12/tuning-phusion-passengers-concurrency-settings/
0915nobodyさん2013/10/16(水) 18:24:48.91ID:???
>>913
Passenger はプロセスを fork して Rails を preload する仕組みだから、当然の結果だ
0916nobodyさん2013/10/16(水) 20:59:21.36ID:G7j2gwai
皆様に漠然としてはいますが質問があります。
�@paperclipで、複数のサイズを用意すると思いますが、どういったサイズを用意するか。
(というか、各デバイスやシチュエーション向けに複数の画像を保存するという方法以外にはないのでしょうか?容量を食いそうでかなり気になります)

�Aたとえば、アマゾンの本のレーティングなどを自分のアプリに取り入れる時、ユーザーの信頼度や評価などから独自のアルゴリズムで点数を算出したいとしたら、
どういったシステムを構築するのが良いでしょうか?
ファイソンなのかRを取り入れるのか?RoRだけで事足りるのか。考え方を教えてください。


答えにくい質問かもしれませんが、先輩達のお考えを拝聴したいと思います。
宜しくお願い致します。
0917nobodyさん2013/10/16(水) 21:01:30.27ID:???
質問させてください

検索エンジンの結果で

○時間前
といったように最終更新(投稿)時間が表示されるようにするには
last modifiedを吐き出すように静的ファイルを生成するなど何か特殊なことをしないといけないのでしょうか?
0918nobodyさん2013/10/16(水) 21:23:05.33ID:???
time_ago_in_words
0919nobodyさん2013/10/16(水) 21:41:16.51ID:???
>>918
いえ、gem理由によるサイトでの表示ではなく
googleなど検索エンジンの検索結果画面で表示される ○時間前 といった表示の話です
0920nobodyさん2013/10/16(水) 22:02:05.15ID:???
>>919
解析班頼む
0921nobodyさん2013/10/16(水) 22:16:31.35ID:???
そりゃあんたの履歴だ
0922nobodyさん2013/10/16(水) 22:31:41.45ID:???
>>921
えっ?

検索結果に表示される
○分前とかってのは、その該当ページが更新された時間じゃないの???

時間を表示してページの情報の鮮度だと思うんだけど?
0923nobodyさん2013/10/17(木) 07:09:36.57ID:???
response.headers["Last-Modified"] = "Tue, 08 Oct 2013 11:22:20 GMT"
0924nobodyさん2013/10/17(木) 10:21:16.63ID:???
[ANN] Ruby on Rails 3.2.15 has been released!
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/411432

Riding Rails: [ANN] Rails 3.2.15 has been released!
http://weblog.rubyonrails.org/2013/10/16/Rails-3-2-15-has-been-released/
0925nobodyさん2013/10/17(木) 15:14:52.53ID:???
やりたいことはわかった
mixiみたいに最終ログイン日時を保存しておきたいってことだよね
本家mixiではkyoto tyrant使ってやってる。まあつまり、mysqlには頼ってないredisあたりいれるといい

20-30人程度がサイトアクセスするだけで重くなる
これはありえない。5w/s位すれば重くなるけどそこまでじゃないでしょ?
そもそも今はapache+passengerがオワコン
可能ならnginxとunicornを使うべし
ただ、原因はほかにありそうなんだよね。
assets precompileしてる?よくわからずliveにして毎アクセスごとに生成とかになってない?
0926nobodyさん2013/10/17(木) 15:17:17.59ID:???
同じサーバーにmysqlとappを同居させればそれは重くなる
rails側の処理負担のせいでmysqlが遅くなってよけいダメになるスパイラルになってない?
mysqlでは、slow_queryのログをとれるからググってどのクエリが遅いか調べるといいよ
0927nobodyさん2013/10/17(木) 16:37:21.90ID:???
DBとAppを同じサーバに置いたとしても30人程度でおちるかね?
0928nobodyさん2013/10/17(木) 16:50:51.31ID:???
落ちない
前にさくらVPSの一番しょぼい奴でRailsとMySQL動かして数万アクセス普通にさばいたし
0929nobodyさん2013/10/17(木) 17:49:43.82ID:???
>>898

PassengerMaxPoolSize 7
blog.phusion.nl/2013/03/12/tuning-phusion-passengers-concurrency-settings/
0930nobodyさん2013/10/17(木) 18:50:01.67ID:???
>>916
こう言うと語弊があるがここの人達には難しい質問なんじゃないかな?小規模サイト作っている人が大半のような気がするしそこまでスキルないから分からないんじゃない?
�Aに関しては必要がないので使っていないがおそらくcrontabというのを調べていけばやりたいことに近づくのでは?楽天やアマゾン食べログなどがレーティングの更新に使うとしたらこれじゃないか
�@に関してはよく分からない
0931nobodyさん2013/10/17(木) 19:08:59.09ID:???
>>916
cron自体もしかすると評価いまいちなのかもしれない
よく分からんから自分で調べてみるなりもう少し熟達者を待ってみて
0932nobodyさん2013/10/17(木) 19:14:26.91ID:???
>>916
おそらくcronを簡単に操れるwheneverというのが最適なんじゃないかと推測する
それがNOの場合は下記に誰かしらが否定すると思われ
まぁそこらを調べてみれ
0933nobodyさん2013/10/17(木) 19:29:05.27ID:???
>>916
cl_image_tag("face_top.jpg", :width =>100, :height => 100, :crop => :thumb, :gravity => :face)

d3jpl91pxevbkh.cloudfront.net/demo/image/upload/w_100,h_100,c_thumb,g_face/face_top.jpg
d3jpl91pxevbkh.cloudfront.net/demo/image/upload/w_0.3/face_top.jpg

devcenter.heroku.com/articles/cloudinary#using-with-ruby-on-rails
0934nobodyさん2013/10/17(木) 19:52:39.77ID:+6hB0tTJ
Generating a 150x100 version of the sample image and downloading it through a CDN:
res.cloudinary.com/demo/image/upload/c_fill,w_150,h_100/sample.png

cloudinary.com/documentation/cloudcontrol_integration
0935nobodyさん2013/10/17(木) 20:15:15.09ID:???
>>916
wheneverはキャッシュの定期削除なんかにも使えるらしいからここにいる人でも詳しい人多いかも
むしろ知らないのは俺でしたw
task管理に最適なものはここにいるエキスパートたちに聞きなはれ
0936nobodyさん2013/10/17(木) 20:54:12.65ID:R4NwrvMo
Cloudinaryのような機能は、paperclipではできないのでしょうか???
0937nobodyさん2013/10/17(木) 20:57:48.64ID:R4NwrvMo
あるいは似たような機能を有するものはありますか?
比較検討に値するもの
0938nobodyさん2013/10/17(木) 21:43:44.44ID:???
ImageMagick + Rmagicでサムネイル画像を作成する - プログラマ憧れプログラマ日記
nobyu.hatenadiary.jp/entry/20120311/1331473288
0939nobodyさん2013/10/17(木) 22:04:18.94ID:???
画像のサムネイルはもうぜんぶ動的生成にしてるわ
各サイズ用意する方が手間だし
0940nobodyさん2013/10/17(木) 23:07:25.50ID:R4NwrvMo
スマホ用だけ別枠で用意した方がいいんですかね?
フェースブックの写真一覧もイラッと来る遅さですよね。
Cloudinaryだとストレスを感じない位の速度なんでしょうか?

容量抑えるために皆様はどういった工夫をされていますか?
0941nobodyさん2013/10/18(金) 03:56:09.85ID:???
工夫はしない
アップロードファイルは容量を食うもんだと割り切る
以外となんとかなる
0942nobodyさん2013/10/18(金) 09:45:11.71ID:???
amazon S3なんて1G10円とかだろ
0943nobodyさん2013/10/18(金) 10:03:58.05ID:???
aws.amazon.com/jp/s3/pricing/
0944nobodyさん2013/10/18(金) 10:30:02.00ID:???
>>929
それで解決しました
ありがとう

メモリ1GBでMaxPoolSize20とか15に設定していましたが
そんな高い数値に設定できないもんですね
0945nobodyさん2013/10/18(金) 10:32:24.43ID:???
>>925
RailsだけでなくPHP(phpMyAdminやアクセス解析)なども使い
特定アドレスへのアクセスだけPassengerがOFFになるような設定をApacheでやっています

nginxでも同様なことが出来ますか?
同時アクセスに対してnginxはそんなに強いのでしょうか?
0946nobodyさん2013/10/18(金) 10:36:41.75ID:???
>>925
assets precompileはもちろんしています

しかし、それで生成されたハッシュ付きのjsファイルはキャッシュ化されているのでしょうか?

どうやらexpireの設定がされていないよに思えます


>>926
slow_queryなんてあったのですね
ありがとうございます


一つ皆さんに教えて欲しいんですが
稼働中の自分のサイトが突然なんかの拍子で重くなったら
どんな手順を追って原因を突き止めますか?

データベースの問題(重いクエリや瞬間的に同時にクエリが発生してるなど)

ApacheやPassengerなどサーバーエンジンの問題

Railsそのもののコーディングの問題

などなど
0947nobodyさん2013/10/18(金) 10:37:46.95ID:???
>>927
MaxPoolSize 5にしたら落ちなくなり快適になりました

15や20に設定していたときは、一時間もしないうちに落ちていました。

ちなみにメモリは1GBです
0948nobodyさん2013/10/18(金) 10:39:27.84ID:???
>>928
まさにそれです

さくらの一番安い980円のメモリ1GBプランです

MaxPoolSizeを20→5に変更すると
全く落ちなくなりました

これはSSDの2GBのプランとかに引っ越してMaxPoolSize 20とかにしたほうが
サクサク早くて快適になるのでしょうか?
0949nobodyさん2013/10/18(金) 10:57:43.74ID:???
質問させてください

ブログのコメントのように
コンテンツが次々と増えていくいくとします。
(例 平均して一日1000コメントくらいづつ増えるとします)

このコメントを1ページで50コメントづつDESC順(最新コメントが最初)で表示させていたとします。


すると一番古いコメントは
最初は URL?page=1ですが
5日もするとURL?page=100の位置に来ます

これってSEO的には問題でしょうか?

googleとしては最初にpage=1のURLと関連キーワードを記録していると思います。
しかし、凄い勢いでこの保存したキーワードとURLの組み合わせが変更されていきます。


pagenatorを使うときはDESCではなくASCを使うのが一般的なのでしょうか?

ただfacebookやtwitterのように新しいコメントがトップに来てる方が見やすかったりします。
0950nobodyさん2013/10/18(金) 12:13:42.85ID:???
被リンクの数や質が重要
0951nobodyさん2013/10/18(金) 12:25:23.28ID:???
相手にすんなよ
0952nobodyさん2013/10/18(金) 13:20:50.08ID:???
>>949
俺もこれ知りたい
0953nobodyさん2013/10/18(金) 17:18:12.27ID:???
>>949
よく気づいたね
それがCMSでのSEO攻略のミソの部分だよ
検索エンジンとしては特定URLのページ内容がしょっちゅう書き換わるようなURLは検索結果として信頼性(精度)が著しく落ちてしまう

いかにURLと記事内容を固定化させるかはCMSにおいての必勝法みたいなもん

欲を言えばhtmlで出力させるなどして静的化させたほうがよい
0954nobodyさん2013/10/18(金) 17:58:31.36ID:???
2chみたいなコメントが増える型でURL固定って無理じゃね
0955nobodyさん2013/10/18(金) 18:06:27.49ID:???
>>953
神様ありがとう
0956nobodyさん2013/10/18(金) 18:15:46.67ID:???
Rails 4からhas_one等に:selectのオプションを指定してカラムを絞ることが出来なくなったみたいですが、代わりの方法はあるのでしょうか?
0957nobodyさん2013/10/18(金) 18:25:22.77ID:???
>>956
ラムダ式で普通にできるっしょ
確か別のクエリ叩いたりRubyの式を書くこともできたはず
0958質問常連者 感謝感謝2013/10/18(金) 21:07:04.33ID:NnVzWy/v
http://kohada.2ch.net/test/read.cgi/php/1382097427/

いつもお世話になっているので、次スレ立てさせていただきました。
写真の管理にpaperclipではなくて、Cloudinaryとアマゾンを使うのが世の流れなのでしょうか?
(ちなみに私は、さくらVPS800GBを使ってスタートしようと思うのですが、写真1枚100KB、800万枚入る計算ですが)
0959nobodyさん2013/10/18(金) 21:15:22.65ID:???
carrirerwaveのほうが今は主流かな
0960nobodyさん2013/10/19(土) 05:11:57.92ID:???
>>954
無理じゃない
古いほうから順にページ番号をナンバリングしていけば完全に固定化される
0961nobodyさん2013/10/19(土) 06:36:06.82ID:???
誰かバリデーションのことで教えて!


Aというテーブルにa, b, c, dという4つのカラム(ポリモーフィック)があります。

このa, b, c, dが完全一致するレコードが重複してはいけない場合は

eというカラムを追加して保存時に
e=a+b+c+d
A.e=e
A.save
として

Aのモデル定義にて
eカラムをuniqunessのバリデーション設定してあげる必要がある?

それとも、いちいちeカラムとかを追加しないでスマートにバリデーションチェックをかける方法はありますか?
0962nobodyさん2013/10/19(土) 09:44:45.39ID:???
>>961
validates uniqueness scope でぐぐれ
0963nobodyさん2013/10/19(土) 13:04:54.18ID:hyytPm3D
railsでcancan的なシステムを自分で構築するには、どのサイトで勉強するのが良いでしょうか?
認証はdeviseではなく自前でやっているので、拡張性を考えて全部自前でやりたいなと思っているのです。
0964nobodyさん2013/10/19(土) 13:08:47.74ID:???
deviseはコントローラーやメソッドをドキュメント見てオーバーライドしたりすれば制約はほとんどないよ
trackableなんかも自作メソッドで別テーブルに保存したりできるし
0965nobodyさん2013/10/19(土) 13:17:33.46ID:hyytPm3D
>>964
追々deviseにするかもしれません。
ただ、今は構築中の初心者なので、仕組みを理解しながらやっていきたいなと思っているのです。
cancan的なことを自前でやっている人はあまりいないですかね?
一般ユーザーは登録編集までできて、管理ユーザーは削除までできるとか
0966nobodyさん2013/10/19(土) 13:29:03.29ID:uAnzwLAs
authorization とか authz とかのキーワードで探した実装を参考にするとよいのでは?
0967nobodyさん2013/10/19(土) 15:00:01.36ID:???
RailsによるアジャイルWebアプリケーション開発って本が参考になると思う
0968nobodyさん2013/10/19(土) 15:01:41.88ID:???
どうせRuby・Railsのバージョンが古くて
互換性がないというオチだろう?
0969nobodyさん2013/10/19(土) 15:56:03.97ID:Jr/4anBv
tests
GET /tests(.:format) tests#index
POST /tests(.:format) tests#create
new_test
GET /tests/new(.:format) tests#new
dit_test
GET /tests/:id/edit(.:format) tests#edit
test
GET /tests/:id(.:format) tests#show
PUT /tests/:id(.:format) tests#update
DELETE /tests/:id(.:format) tests#destroy

こういうルーティングがされているとき

@test = Test.new(params[:test])
format.html { redirect_to @test }


redirect_to @testはどうして「GET /tests/:id(.:format) tests#show」になるのでしょうか?

redirect_to @test.id ならわかりますが・・・
0970nobodyさん2013/10/19(土) 17:08:23.46ID:uAnzwLAs
>>969

redirect_to と url_for のリファレンス嫁
0971nobodyさん2013/10/19(土) 18:56:06.66ID:Jr/4anBv
>>970
読んだけど書いてません
0972nobodyさん2013/10/19(土) 19:25:17.68ID:???
redirect_to(options = {}, response_status = {})

Record - The URL will be generated by calling url_for with the options, which will reference a named URL for that record.


url_for(options = nil) Link

Relying on named routes

Passing a record (like an Active Record) instead of a hash as the options parameter will trigger the named route for that record. The lookup will happen on the name of the class. So passing a Workshop object will attempt to use the workshop_path route.

バッチリ書いてるね
0973あ2013/10/19(土) 20:04:10.64ID:???
代わりに、オプションパラメータとしてハッシュを記録(Active Recordのような)を渡すと、
そのレコードの名前付きルートの引き金となるでしょう。
ルックアップは、クラスの名前に起こります。
だから、ワークショップのオブジェクトを渡すとworkshop_pathルートを使用しようとします。
0974nobodyさん2013/10/19(土) 20:39:09.87ID:Jr/4anBv
>>972-973
http://api.rubyonrails.org/だったんですね
すいませんraisdocをあぼーんしたらそこも見えなくなって、見たけどありませんでしたと嘘つきました

ありがとうございました
0975nobodyさん2013/10/20(日) 06:04:59.30ID:???
現在、apacheで運用してて毎日6万PV回してるけどもう限界かもしれん

サーバーが日に2度3度落ちる

1GBさくらVPSだとこんなものかのぉ
0976nobodyさん2013/10/20(日) 06:27:52.20ID:???
それくらいならnginxにかえれば全然持つよ
0977nobodyさん2013/10/20(日) 06:35:16.08ID:???
nginxってそんなに優秀なの?
0978nobodyさん2013/10/20(日) 07:01:54.08ID:???
apacheはメモリ食い過ぎるから今の主流はnginx-unicornだよ
優秀ってほどじゃないけどそれくらいのPVならまだ戦えると思う
0979nobodyさん2013/10/20(日) 07:55:24.16ID:???
passenger は裕福なサーバ向けだからね
0980nobodyさん2013/10/20(日) 08:32:29.67ID:???
ちなみに、さくらの2GB SSDプランで nginx+unicorn なら
どのくらいまでの アクセス数/日 であれば戦えそう?

50万PVくらいかな?
0981nobodyさん2013/10/20(日) 12:40:51.60ID:???
ウェブサーバーごときで
そんなに差は出ない。

結局はアプリ次第。
0982nobodyさん2013/10/20(日) 13:18:52.25ID:fxS1kk8p
http://railscasts.com/episodes/250-authentication-from-scratch-revised?view=asciicast
http://cumiki.com/hacks/16

ここらへんを参考に認証機能をあえて自前で構築しているのですが、下記のようなエラーが出てしまいました。この対策(短期的長期的)を教えていただけたら幸いです。
私がやっていたのは、サインアップ、ログインアウトを実装し、その後にユーザーデータを全部destroyしました(なぜという訳ではないのですが)。
するとsession[:user_id]には"11"という数字が残ったまま、そのユーザーが見つからんということでエラーが出ているようです。
下記はアプリケーションコントローラーのコードで、レイアウトテンプレートに入れて共通表示しているものです。

私が知りたいのは、�@session[:user_id]をターミナルとかから消せないか、�A長期的に、ログアウトやユーザー削除がsession[:user_id]を掃除するにはどうすればよいのか。

とりあえず、共通表示のコードを取り払えば、このエラー表示からは逃げれそうですが、仕組みを解するためにも上記二点を知りたいと思っています。
宜しくお願い致します。

ActiveRecord::RecordNotFound in UsersController#new


Couldn't find User with id=11


Extracted source (around line #8):

private

def current_user

line8 @current_user ||= User.find(session[:user_id]) if session[:user_id]

end

helper_method :current_user
0983nobodyさん2013/10/20(日) 13:59:02.69ID:???
エラー内容とやりたいことがまったく噛み合っていないので答えようがない
0984nobodyさん2013/10/20(日) 13:59:25.30ID:fxS1kk8p
http://higelog.brassworks.jp/?p=343

よくpassengerの話が出ていますが、このサイトはナルホドと思いました。。。
0985nobodyさん2013/10/20(日) 14:05:23.79ID:fxS1kk8p
>>983
すみません。
素人過ぎて、噛みあっていないというところから理解できていませんでした。
session[:user_id]に残っていると思われる"11"というのを、削除したいのですが、短期的解決方法(�@)、長期的解決方法(�A)を探っている段階でございます。
もうすこし勉強してきます。
0986nobodyさん2013/10/20(日) 14:19:23.61ID:Hy7aQ34j
クッキー消せ
0987nobodyさん2013/10/20(日) 15:25:29.58ID:fxS1kk8p
>>986
ありがとうございます!
エラー表示されなくなりました!

こちら(クライアントサイド)のクッキーの問題なんですね^^;
0988nobodyさん2013/10/20(日) 15:33:13.39ID:???
>>981
静的ファイルの読み込み速度は全然違うよ
0989nobodyさん2013/10/20(日) 16:33:37.68ID:Hy7aQ34j
>>987

Railsのデフォルトではクッキーにセッション情報が入っている。
(改竄対策はされている。Rails4からは暗号化もされている)

サーバ側でセッション内のユーザーIDからユーザーオブジェクトを作ろうとして見つけられなかった
のがエラーの原因なので、対応としては、

クライアント
* もうサーバ側に存在しないユーザーIDをセッションを介して送るのをやめる。
= セッションクッキーを消す。

で当座は凌げるが、抜本的には

サーバで
* 存在しないユーザーIDと分かった(current_userメソッドで RecordNotFound が発生した)とき、
** ユーザーIDをセッションから消す
** セッションをまるごとリセットする
などの対応をする。
0990nobodyさん2013/10/20(日) 17:01:06.75ID:fxS1kk8p
>>989
完璧な御回答ありがとうございます。
current_userメソッドを改造すればいいわけですね・・・
ifとかで場合わけするのでしょうか・・・

ちょっと調べてみます。
ありがとうございました。
0991あ2013/10/20(日) 17:19:40.84ID:???
http://railsdoc.com/references/reset_session
レス数が950を超えています。1000を超えると書き込みができなくなります。