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

【RoR】Ruby on Rails Part16

■ このスレッドは過去ログ倉庫に格納されています
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
0409nobodyさん2013/05/28(火) 22:13:28.14ID:???
>>408
Installてとこ読めばいいだけに見える
0410nobodyさん2013/05/31(金) 10:18:17.43ID:+PRRlHZr
http://www.ustream.tv/recorded/33523905
http://www.ustream.tv/channel/rubykaigi1
http://www.ustream.tv/channel/rubykaigi2
0411nobodyさん2013/06/01(土) 11:04:04.45ID:PrhkBdJG
High Performance Rails
http://www.ustream.tv/recorded/33559705
http://rubykaigi.org/2013/talk/S76

Amazon.co.jp: WEB+DB PRESS Vol.70
実践Rails高速化
http://www.amazon.co.jp/gp/product/4774151904
0412nobodyさん2013/06/03(月) 11:29:37.37ID:???
データベースエンジンには
MongoDBとMySQLはどちらがオススメ?
0413nobodyさん2013/06/03(月) 17:04:33.89ID:???
用途が違うからなんともとしかいいようがない
0414nobodyさん2013/06/03(月) 18:24:00.41ID:???
ActiveRecordでANDとORの複合で、検索対象の列を動的に変更する方法ってどうやれば良いんでしょうか・・・。
0415nobodyさん2013/06/03(月) 18:48:12.14ID:???
>>414
arel_tableで調べてみるとお望みの情報が得られるかもしれません
0416nobodyさん2013/06/03(月) 20:15:07.59ID:???
>>413
ん?どういうこと?
04174142013/06/03(月) 20:30:14.53ID:???
>>415
あざっす。
ちょっと調べてみます。
0418nobodyさん2013/06/07(金) 17:59:31.41ID:???
gemやら、Twitterブートストラップの完全版など使えば使うほど
Railsアプリの動きは遅くなるのかな?
0419nobodyさん2013/06/08(土) 09:01:28.16ID:???
アソシエーションでhas_manyを指定した場合、テーブルがjoinされずに
参照元テーブルのデータ1件1件に対してSQLを発行して
参照先テーブルのデータを抽出してる。

何か嫌だなと思い、joinsメソッドを利用しようかなと思うと、
本には「可搬性を損なう可能性があり余り使うな」的なことが書かれている。

うまい具合にjoinさせるにはどんなやり方がスマート?
0420nobodyさん2013/06/08(土) 09:10:39.43ID:???
includes
0421nobodyさん2013/06/08(土) 11:25:43.61ID:???
thx!

has_manyのincludeオプションがrails4では無くなってるぽいし、
とりあえず気にしないことにするわ
0422nobodyさん2013/06/08(土) 11:55:01.89ID:bZllAe6B
has_many のオプションじゃなくて、
active_record/relation/query_methods.rb で
定義されている Post.includes(:author) みたいな方じゃないの?
0423nobodyさん2013/06/08(土) 21:51:56.32ID:???
rails4に移行した人に聞きたいんだけど
そんなに早い?
0424nobodyさん2013/06/08(土) 22:46:38.06ID:???
そこそこ速い
けどruby1.9→2.0ほどは変わらない
ちゃんとベンチマーク取ってない印象レベルだけど
0425nobodyさん2013/06/08(土) 22:59:29.22ID:bZllAe6B
スピードについてはとくに売りにしてはいなかったと思うので情報がないな。
せいぜい「1.8を切り捨てたので方々で場合分けをする必要がなくなった」くらいで。
0426nobodyさん2013/06/08(土) 23:31:05.54ID:???
ruby1.9→2
ってそんなに早くなったかなぁ
0427nobodyさん2013/06/09(日) 09:03:38.88ID:???
require が速くなったので rails のような require の塊だと起動時間が雲泥の差
スループットはそんなに変わらん
0428nobodyさん2013/06/09(日) 12:39:49.72ID:???
Rails4の場合、turbolinksの効果が気になるなー。
0429nobodyさん2013/06/12(水) 21:14:40.81ID:???
turbolinksってコンテンツ領域などではなくて、body全体を置き換えるの?
0430nobodyさん2013/06/13(木) 08:18:46.12ID:EofK01c0
bodyまるごとと、あとtitleと、ページ閲覧履歴(pushState)かな。

サーバはturbolinks経由で呼ばれていることには気付かず、従来どおり
HTMLをまるごと返す。よってページのHTML生成に関してのサーバ負荷は
変わらない。

headにあるlinkやscript要素の解釈がなくなる分が高速化ということらしい。
スタイルシートやスクリプトの読み込みについては、asset pipilineがあるので、
基本的に全ページ同一のはず。
0431nobodyさん2013/06/13(木) 22:27:25.95ID:???
楽で良さそうだね
0432nobodyさん2013/06/14(金) 02:41:26.20ID:???
Rails4のprecompileでdigestの入ったファイルしか生成されないせいでcssのbackgroundが読み込めません
css側にimage-url指定しても同じようで、どうすれば解決できますか?
0433nobodyさん2013/06/14(金) 06:07:42.18ID:???
これはどうだろ
background-image: url(image_path('check.png'));
http://stackoverflow.com/questions/15257555/how-to-reference-images-in-css-within-rails-4
0434nobodyさん2013/06/14(金) 11:52:47.97ID:???
>>433
その質問は既に実践してみたけどダメっぽいす
rails4のsprockets-railsがハッシュ化したものしか吐き出してくれなくて、CSSで自動対応orハッシュ化しないものも吐き出すのどっちか実現できるといいんですが
0435nobodyさん2013/06/14(金) 13:45:06.60ID:Tnh0zzXS
cssつーか、scssで書かないとimage_path関数は使えないのでは?
0436nobodyさん2013/06/14(金) 13:53:35.38ID:Tnh0zzXS
> Only compiles digest filenames. Static non-digest assets should simply live in public/.

ということは、直接 public/images (を掘って) 使え、ということなのだろうか。
0437nobodyさん2013/06/14(金) 14:23:26.62ID:???
>>435
ここでいうcssはscssのことです
画像をそのままpublicにコピペしてprecompile、で済めばいいんですがCSSフォントをstylesheetのフォルダに入れていたりして
逐一手作業でやるとうっかりミスがありそうで怖いっすね
0438nobodyさん2013/06/18(火) 15:46:00.85ID:???
バリデーションの条件を動的に変更することってできる?
あるときは必須入力だが、またあるときは空白でもいい、という具合に
0439nobodyさん2013/06/18(火) 21:55:59.97ID:tjJhZDGu
if: とか unless: とか on: とかのオプションをどぞ。
0440nobodyさん2013/06/18(火) 22:18:51.93ID:hv3t4vIG
,
◆じゃあのさん来た!◆
15:名無しさん@13周年[]
2013/06/18(火) 20:44:34.07 ID:xHiEGVRK0
おうwww俺だwww
なんか色々起きてるみてえだなあwww
最近しばき隊大活躍だもんなあwww在特の奴らも巻き込まれてかわいそうになあ

これな、俺から言わせれば警視庁本部警備課と新宿署の不手際だわwww
完全に本部カラ派遣された本部警備課員と新宿署がドジ踏んだ案件だわ

--- 以下スレ情報 ---
【東京】嫌韓デモで衝突 在特会会長やしばき隊のメンバーなど8人を逮捕★12
http://uni.2ch.net/test/read.cgi/newsplus/1371555637/
0441nobodyさん2013/06/23(日) 12:47:46.80ID:???
railsでDBなどを二つのアプリで共有したい場合どうすればいいでしょうか?
database.ymlをそろえて片方からmodelとhelperをautoloadで読み込む方法以外にありますか?
0442nobodyさん2013/06/24(月) 00:40:42.32ID:QnIiM3MY
以前、pragmaticシリーズの本で二つのデータベースに接続する方法が書いてあったような。
0443nobodyさん2013/06/24(月) 07:26:45.49ID:???
>>441
modelだって2つのアプリで異なるだろう
2つともまったく同じだというなら、それは別アプリにする必要があるのか?から考えた方がいい
database.ymlをそろえて後はそれぞれで実装すればいい

>>442
逆だろ
0444nobodyさん2013/06/24(月) 07:59:17.65ID:7cn1fuW1
完全に同じならそこだけengineにしてしまえ。
0445nobodyさん2013/06/26(水) 07:31:56.30ID:???
4.0リリースおめ
0446nobodyさん2013/06/26(水) 16:03:45.08ID:y0jOgAZs
はじめまして。初歩的な質問で申し訳ないですが、こちらで質問させてください。

モデルからコントローラへ値を渡す際はどのような方法がありますでしょうか?

モデルで値を代入したインスタンス変数を用いて、以下のように[モデル]→[ビュー]へ値を渡そうとしたのですができませんでした(Rails 3.2.13)。
---
■失敗したコード
○モデル
@next_page = "test"

○ビュー
<%= form_for @tmp_order, :url => {:action => @next_page} do |form| %>

(省略)

<p><%= form.submit %></p>
<% end %>
---

そこで考えてみると、[モデル]→[コントローラー]→[ビュー]のような流れで渡さなければいけないのではと気づいたのですが、具体的にどのように記述すればよいかが分かりません。

上記の「失敗したコード」のモデルの記述をそのままコントローラーに記述すると、フォームのサブミットボタンを押下した際に文字列に対応するページへ遷移することができます。

ですので、[コントローラー]→[ビュー]へ値を渡したい場合はインスタンス変数を用いれば良いと分かったのですが、[モデル]→[コントローラー]へ値を渡す方法が分からない状況です。

参考となるサイトなどありましたらご教示いただけますと幸いです。よろしくお願いいたします。
0447nobodyさん2013/06/26(水) 16:33:14.55ID:???
モデルに値を設定するメソッドを作成して、コントローラーで返り値を受け取る
返り値をビューに渡せばOK

Controller:
@hoge %3d Model.hode

Model:
def self.hoge
return 'hoge'
end

View:
hoge %3d <%%3d @hoge %>
0448nobodyさん2013/06/26(水) 16:34:30.90ID:???
イコールがなぜか「%3d」になったけど、イコールに脳内変換してください
04494462013/06/26(水) 19:15:01.21ID:ubczZcmN
ありがとうございます。まだRailsをはじめて2週間ほどなので非常に勉強になります。

そもそもやりたいことの実装方法に何か見落としてがある気がしてきました。

フォームのサブミットボタンを押下した際に、
以下のようにコールバックを利用して、
createやupdate_attributeが呼ばれた後に
バリデーションの結果に応じてビュー(form_forメソッドの:url)に渡す
遷移先のページ名を切り替えれるようにしたかったのです。

---
■失敗したコード 2
○モデル
after_create :set_next_page
after_update :set_next_page

def set_next_page
self.valid? ? @next_page = 'next_test' : @next_page = 'test'
end

○ビュー
<%= form_for @tmp_order, :url => {:action => @next_page} do |form| %>

(省略)

<p><%= form.submit %></p>
<% end %>
---
04504462013/06/26(水) 19:17:40.96ID:ubczZcmN
バリデーションエラーが発生した際に、エラーをフォームを表示するページ('test')に表示し、
再入力をうながすようにしたいというのがはじまりです。

しかし、はじめはfrom_forの「:url => {:action =>」に「'next_test'」と
リテラルで記述していたので、バリデーションエラーの発生有無にかかわらず
次のページ('next_page')に遷移してしまいいとした挙動となりませんでした。

そこで、前述のようにコールバックを利用してなんとかできないかなと、
試行していますがどうもうまくいきません。

「:url => {:action => @next_page}」を記述しないと「undefined method `hoge_path'」のように怒られてしまいます。

なにか、アイデアやヒントがありましたらご教示いただけますと幸いです。
0451nobodyさん2013/06/26(水) 20:05:10.77ID:???
>>450
バリデーションを行うメソッドをコントローラに用意する
そのメソッドの中でエラーフォームをrenderするか次のページにredirectするかを決める
0452nobodyさん2013/06/26(水) 21:23:47.18ID:KC4YmkCB
モデルが遷移先を表す情報を返すのはおかしい。
バリデーション結果(@tmp_order.valid? とか @tmp_order.errorsとか)を
見て判断するばいいのでは?
04534462013/06/26(水) 22:02:25.58ID:ubczZcmN
おふたりともありがとうございます!

いただいたアドバイスをもとに
(バリデーションを行うメソッドをコントローラに用意する方法は分からなかったのですが、)
コントローラーで次のページにredirectする処理を入れるというのが良いと思ったので、
失敗したコード2(>>449)のモデルの記述を全て削除して、以下のように書き直しました。

「helper_method :select_next_page」を書くことで、
ビューからコントローラーメソッドを呼び出すことができるという記事を見つけたので、
その方法を使ってみました。
04544462013/06/26(水) 22:04:40.03ID:ubczZcmN
---
■失敗したコード 3
○コントローラー
helper_method :select_next_page


def hoge
private
def select_next_page(validation_flg)
redirect_to :action => 'next_test' if validation_flg
end
end

○ビュー
<% @next_page = 'test' %>
<%= form_for @tmp_order, :url => {:action => @next_page} do |form| %>


(省略)

<p><%= form.submit %></p>
<% end %>
<%= select_next_page(@tmp_order.valid?) %>
---

このコードだと、ビューが読み込まれる際に
必ず最下部の「<%= select_next_page(@tmp_order.valid?) %>」が
実行されてしまうので、testページが表示されないままnext_pageページが表示されてしまいます。

サブミットボタンを押下するまで「<%= select_next_page(@tmp_order.valid?) %>」が
実行されないようにすることはできないのでしょうか?
04554462013/06/26(水) 22:07:28.44ID:ubczZcmN
>>454の「○コントローラー」の記載は誤りです。正しくは以下です。すみません。
---
○コントローラー
helper_method :select_next_page


private
def select_next_page(validation_flg)
redirect_to :action => 'next_test' if validation_flg
end
0456nobodyさん2013/06/26(水) 22:08:24.95ID:???
>>454
ビューにそういう仕事をさせない
そういうのはコントローラの仕事

どうもPHP臭い癖が残ってるようだが、PHPと違ってビューはあくまで表示に徹するという意識改革が必要
04574462013/06/26(水) 22:17:20.64ID:ubczZcmN
>>456
ありがとうございます!

また考えなおしてみます!
0458nobodyさん2013/06/29(土) 06:05:07.02ID:4ayE3ytL
自分でサーバ立てるのってなんか楽しそうだしスゴそうだよね?
サーバ立てるのなんてちょっとパソコンに詳しければ簡単にできるんでしょ?
ハードウェアの多重化なんて必要?
企業で使うとかじゃなく個人的に細々と立てたサーバが攻撃されることなんて滅多にないよね?
攻撃が来るって言ったって大した数じゃないんでしょ?
攻撃されたって大したことは起きないんでしょ?
http://b.hatena.ne.jp/entry/tmaeda.s45.xrea.com/20041101.html

ITmedia エンタープライズ:自社サーバがフィッシングサイトに「踏み台化」されたら? (1/3)
また、電源を切ってしまうことも良い対応ではない。
オンメモリ上で稼働しているフィッシングサイトの場合は、電源を切ることによって、すべてのデータが消えてしまい、原因究明や対応に遅れなどが出ることも考えられるからだ。
 事実、フィッシングサイトを構成するツールの中には、後に証拠が残らないよう、すべてがオンメモリ上で動作するものがある。
このような場合、再起動や電源オフによって、メモリ上にあるすべてのプログラムやファイルが消え、事実や原因の確認が困難になる。
http://www.itmedia.co.jp/enterprise/articles/0603/17/news004.html
0459nobodyさん2013/06/29(土) 12:26:21.94ID:???
すみません。質問させてください。

Rails4.0.0正式版を使っているんですが、
publicフォルダに独自のindex.htmlを置いたのです。

developmentモード時は
http://0.0.0.0:3000/
でindex.htmlが表示できたのですが、

productionモード時は
http://0.0.0.0:3000/
とアクセスしても

The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.

というエラー表示が出てしまいます。

ログを見ると
ActionController::RoutingError (No route matches [GET] "/"):

となっています。

productionモード時でもindex.htmlを表示できるようにするにはどうしたらいいでしょうか?
0460nobodyさん2013/06/29(土) 14:18:14.35ID:hP/NWwWJ
productionならpublic直下のファイルはwebサーバが配信するから問題ない。
webサーバに頼らず自力で配信したいなら config/environments/produciton.rb の

# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = false

を変更する。
0461nobodyさん2013/06/29(土) 17:50:02.42ID:???
>>460

デプロイ先がHeroku(Webrick)なので、
config.serve_static_assets = true

にして対応しました。おかげ様で表示することができました。
ありがとうございました!
0462nobodyさん2013/07/06(土) NY:AN:NY.ANID:???
Rails入門書を読んでいるんですが、結局画面定義(最終的な出力するHTML、CSS、JS)は、
Railsでやるんですか?

それともrhtmlを別ソフトで編集するんですか?
0463nobodyさん2013/07/06(土) NY:AN:NY.ANID:???
rails先生が一晩でやってくれます
0464nobodyさん2013/07/07(日) NY:AN:NY.ANID:???
デジエがdb的に閉じた環境すぎるのでRailでやり方がないかと・・
Deginoのようにdb自体をクラウドに置くのは嫌なんです

TuigwaaかDrupal+cck+viewsなら出来そうなんですが、
エンドユーザーがmodel追加可能なプラグインさへあれば後は何とかなりそうなんですが・・・
0465nobodyさん2013/07/07(日) NY:AN:NY.ANID:???
日本語でおk
0466あ2013/07/08(月) NY:AN:NY.ANID:kIUaRpvB
松江市ホームページ : Rubyによるグループウェア構築業務委託
http://www1.city.matsue.shimane.jp/tyumoku/johoseisaku/rubygw_kochiku.html

http://www1.city.matsue.shimane.jp/tyumoku/johoseisaku/rubygw_kochiku.data/youkyuushiyousho.pdf
0467nobodyさん2013/07/11(木) NY:AN:NY.ANID:???
Rails4.0をUbuntuで始めたんですが、LinuxだとGemfileが読み取り専用になっていてrootではないと編集できません。
GUIからgemfileは編集できないってことなのでしょうか?
0468nobodyさん2013/07/12(金) NY:AN:NY.ANID:0ocwBlfR
http://ja.wikipedia.org/wiki/Chmod
0469nobodyさん2013/07/12(金) NY:AN:NY.ANID:???
>>467
須藤さんに頼めば?
0470nobodyさん2013/07/12(金) NY:AN:NY.ANID:???
>>467
GUIから編集できます
0471nobodyさん2013/07/14(日) NY:AN:NY.ANID:???
よくわからんが rails newを間違えてsudo付けて実行したとかじゃないの
0472nobodyさん2013/07/15(月) NY:AN:NY.ANID:V1KW3/2M
Riding Rails: [ANN] Rails 3.2.14.rc1 has been released!
http://weblog.rubyonrails.org/2013/7/12/Rails-3-2-14-rc1-has-been-released/
0473nobodyさん2013/07/15(月) NY:AN:NY.ANID:???
みんなはデザインの部分は
DreamWeaverみたいなの使って作って
それをあてがってる?
それともデザインもhtmlをタグ打ちしてる?
最近はデザインのほうが面倒く感じるようになってきた。。。
0474nobodyさん2013/07/15(月) NY:AN:NY.ANID:IrAB52ny
うちのHTML制作スタッフはDWとSublime Text使ってる。
0475nobodyさん2013/07/15(月) NY:AN:NY.ANID:???
pc用とスマホ用を切り分けてデザイン作るのがメンドイんですが
何か良いアドバイスないですか?
皆さん予め自分用のテンプレート作ってますか?
コントローラーから同じ変数だけビューに渡して

ビューだけそれぞれのページを
pc用、スマホ用に分けて表示させるかんじで
0476nobodyさん2013/07/15(月) NY:AN:NY.ANID:???
>>473
photoshopでカンプ作ってからコーディングする
livereloadがあるからエディタはなんでもいいんじゃないすか
04774672013/07/15(月) NY:AN:NY.ANID:???
>>469-471
それが原因でした

chownしてなんとか解決しました。
ありがとうございました。
0478nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>476
カンプってなんだ?
0479nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>476
うは
初めて知った!!
みんな、デザイン部分はphotoshopとかでやってから
それを利用してテキスト部分だけをrailsであてがうのか。。。
俺、今まですべてタグ打ちでデザインレイアウトまでやってて
時間がかかりすぎてたから
レイアウト作るのは本当に億劫な作業だったわ
0480nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>476
ただ、コンプで検索してみたところ基本的にPC用デザインしか対応できなさそうだけど
スマホ用のデザインはどうしてる?
0481nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
Railsでwebアプリ作ってみたはいいが
1ページ1ページの読み込みがクソ遅い

都度更新が行われるSNSなんでキャッシュは実装していない

ソーシャルボタンも重くしてる要因だと思うけど
それ以外のページでも読み込みがクソ遅い

なぜ?
ページを読み込む際にカウント使ってリアルタイムの値を表示させまくってたりするから?
0482nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
どなたか教えてください

phpMyAdminやphpのアクセス解析をRailsAppと併用して使いたいがためにApache2+Passengerの組み合わせを利用しています。

様々な記事を読んでいるとnginx+Unicornのほうが圧倒的に早いとのことです。

phpMyAdminやphpのアクセス解析を利用しつつ
nginx+Unicornを利用する方法はありますか?
0483nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>480
スマホサイトでもカンプ作るのは割りと普通だが、CSS3がほぼ対応してるからインブラウザデザインをすることも多い
ただスマホの場合はデザインの自由度が限られてるからlivereloadかけながらゴリゴリやっても問題ないかも
0484nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>482
cgiは基本的にapacheで処理しつつ、railsだけをnginxのupstreamで処理する

というかphpMyAdminもphpもnginxで動くから、すべてnginxに移行したほうが楽なんじゃないのか
nginxもapache同様ログが残せてWebanalizerも使える
0485nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>483
カンプってそのまま使えないの?
俺の見解だとただの完成予想図みたいなかんじなんだけど。


実際にそれを利用して、テキスト部分だけを変数的なもので入れ替えるってことはできるの?
0486nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>485
HTML用に書き出せることはできるけど、あくまで完成予想図だよ

ブラウザでデザインしてると一つの要素をいじると他の要素に影響与えたり、コーディングが複雑になると容易に変更できなくなる
カンプなら自分の考えを短時間で表現できるし、後からの変更に対応しやすい点が特徴
0487nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>486
やっぱりそうか
何らかの形で直感的にイメージ(レイアウト)を作成して
そこにRailsのコントローラーで吐き出したものをあてていくって出来ないかな?

そうすれば楽なのに

出来ればテンプレートとかあって
PC用、スマホ用のレイアウトとカバーできたらいいのに
0488nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>484
Railsって元々が遅いもんかな?
メモリ1GBのさくらVPSで色々試しています。

helperの多用とか、リロードごとのcount集計(カウンターキャッシュを使ってない)とかやってるとかなり遅い。
1ページが完全に表示されるまでに3秒くらいかかります。
同時にアクセスしてる人なんてほとんどいないのに。。。。

こんなもんなんですか?
大手とかみたいにサクサクと表示させるには
ページキャッシュの利用が必要ですか?
ログインサイトでTwitterみたいな投稿サイトだとキャッシュはフラグメントキャッシュくらいしか使えないので。。。。

しかもフラグメントキャッシュはあまり効果的じゃないみたいですね
0489nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
なんか、acts_as_listがなかなかRails4に対応しないですね。ロードマップには対応の予定とはなっているけども。

https://github.com/swanandp/acts_as_list

みなさん、モデルのレコードの順番を変更するのに、何使ってます?
acts_as_list以外に選択肢ってありますか?
0490nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>488
自分がさくら1Gプランでやってたときはunicornをアプリケーションサーバにして100ms/reqくらいのパフォーマンスでした
クックパッドはRailsで大量のトラフィックさばいて60ms/req前後出してるからチューニングすればそれくらいになるはずです

まずはapacheのabベンチなり、ブラウザのデベロッパーツールで純粋なリクエスト速度を測定しましょう
おそらく3秒もかかっていることはないでしょう

RDBSを使用しているかと思いますが、保存・更新はオンメモリで動作しないために非常に遅いです
リロードごとに更新処理が入るのならmongoやredisのようなデータベースを使用しましょう

helperなど独自メソッドを使用した場合の遅延は相当に多用しない限り大きくならないはず
実際にループで回した時にどれくらいの遅延になるかをベンチマークして把握しておきましょう

キャッシュはページキャッシュが有効ですが動的サイトには向きません
フラグメントキャッシュがどれだけ有効なのかはキャッシュを無効にした時にビューの読み込みにどれくらい時間がかかっているか、ログを出力すればわかるはずです
余りに時間がかかっている場合はフラグメントキャッシュを導入しましょう
0491nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>490
事細かい説明ありがとうございます
Railsアプリを立ち上げてるとき

ab -c 100 -n 500 "http://localhost";

を実行すると

Requests per second: 80.54 [#/sec] (mean)

程度

Railsアプリを立ち上げていないときは
1600くらいの結果がでています


なにが重いんでしょうか?
ちなみにユーザーがページ遷移するごとにUserテーブルのとあるカラムを毎回書き換えてます。

あとjQueryを利用していたり
link_toを使っていたり
ソーシャルボタンを多く表示していたり
1ページ内でページを表示するときに同時に20項目くらいカウントをとっています


どれが致命的に思えますか?
0492nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>491
できれば同時接続一人でリクエストに要する時間を出したほうがいいかもしれません
コードを修正した時にミリ秒単位で算出した方がわかりやすい(といっても好みの問題ですが)

さっきいったようにMySQLなどのRDBSでリロードごとに更新処理を挟むとそれだけでかなりの遅延になるので
redisのようなオンメモリで更新できるベータベースを使用するだけで大幅に時間短縮できます

jQueryやソーシャルボタンはクライアント側で読み込み後の非同期処理なのでアプリケーションのリクエスト速度には影響しません
ただし公式のソーシャルボタンはリクエスト数を非常に増やす要因なので、ボタンは独自に用意して自分でAPIを叩くといったことをすると非同期処理も短縮できるでしょう
0493nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>490
それともう一点だけ疑わしい点が!

application_controller.rb

の中に10ほどのアクションを記述しています。

しかも、どれも若干複雑な処理です。


これらはいろんなコントローラーから呼び出されるのを想定したため
ここ一カ所で集中管理しています。


もしかしてapplication_controller.rbの中のアクションって
ページごとにその値が必要、不要関係なく、
すべて実行されてしまい重くなっている原因になりえますか?

それとも、そのアクション自体を外部コントローラーから呼び出したときだけ、そのアクションのみが実行されるのでしょうか?←これが私の現在の認識なんですが
0494nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>492
mini profilerというgemで試しに各ページのリクエストに要する時間を見てみると
こんなかんじです

ページ
�@1771ms
�A1484ms
�B3388ms
�C624ms
�D381ms
�E583ms
�F305ms
�G1080ms

ページごとに大きく差はありますが
普通はどの程度までが許容でしょうか?
0495nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>494
さすがにいちいちクレクレしすぎw
どの程度が許容出来るかは数値じゃなくて実際の体感によるものだし、チューニングはベンチマークとって一つひとつ検証するしかない
0496nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>495
甘えちゃって申し訳ないです。

そうなんですね、やはり体感で検証しながら修正かけていくしかないんですね。。。

最後にどうか一つだけ質問させてください。

たとえば、
テーブル(モデル)�@〜�Dの異なる5種類のテーブル
それぞれで10レコード、合計50レコードを表示するとき

それぞれ1レコードづつにつき
5項目(カウント集計だったり、helperだったりを呼び出し)
あったとしたなら
表示するときに重くなって当然なのでしょうか?


それぞれ1レコードにつき40msで返してきても
50レコードあるので2000ms、つまり2秒になり体感だと重いです。
でも、いろんなDBサイトではこういう表示の仕方も普通にしてますよね?

その方式で素早い読み込みを
どうやって実現すればいいか悩んでいます。
0497nobodyさん2013/07/16(火) NY:AN:NY.ANID:e/3ts/rm
http://e-words.jp/w/IOPS.html

さくらインターネットVPSのIOPSが
http://pc.casey.jp/archives/153904156

Amazonクラウド、2テラバイトのSSD、60GBメモリ搭載で12万IOPSを実現するインスタンスを発表 − Publickey
http://www.publickey1.jp/blog/12/amazon2ssd60gb12iops.html
0498nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
N+1問題などを監視してパフォーマンスを改善するRailsプラグインBullet|WEBデザイン Tips
http://blog.digital-squad.net/article/149685338.html

http://www.techscore.com/blog/2012/12/25/railsライブラリ紹介-n1問題を検出する「bullet」/
0499nobodyさん2013/07/16(火) NY:AN:NY.ANID:???
>>496
横からだけど、1ページ表示させるのに
何十、下手すると100以上のSQLを裏で発行させているのでは。
もしそうなら遅くて当然です。

むしろ今のサーバーは安いVPSでも頑張るなというのが率直な感想です。
0500nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
すみません。質問です。
複数のRailsアプリがあるとして、それらから何らかの統一された認証機構にアクセスして、
ユーザー認証を行いたいのですが、なにか良い方法はないでしょうか?

◆背景
目的毎に複数のRailsアプリを運用する予定があり、それぞれのRailsアプリでDeviceなどで個々に認証するようにしてしまうと、アカウント情報が分散してしまい、統一管理できない。ユーザーにRailsアプリ毎にアカウント情報の登録・管理の負担を与えてしまうことは避けたい。

◆現在考えている方策
VPSでLDAPサーバーを立て、ユーザーアカウントの登録・管理はこのLDAPサーバーで行う。各RailsアプリはこのLDAPサーバーを使って認証を行う。

という感じなのですが、上記以上の良い方法はありますでしょうか?

ちなみに、TwitterやFacebookのアカウントで認証させればいい、という方法は、これらのWebサービスを使っていない人もいるため、避けたいです。
あくまで、自前でアカウント管理を行い、各種Railsアプリがそれを見にいく方法でいきたいと思っています。
0501nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
トレードオフ
0502nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
トレードオフ(英: Trade-off)とは、一方を追求すれば他方を犠牲にせざるを得ないという状態・関係のことである。
トレードオフのある状況では具体的な選択肢の長所と短所をすべて考慮したうえで決定を行うことが求められる。
0503nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
「ベストプラクティス」という言葉の乱用
「ベストプラクティス」というと、「うたがいなく常に最善である」という印象を与える。
大抵まちがった印象である。

どれだけ自信があったら「ベストプラクティス」などという言葉を疑いもなく使えるんだろうか。
私は「こうしなさい」などとは言えない。
今の自分の考えを説明するが、自分でもそれが正しいとは思わない。
ある特定の問題に対処するのに、こういう考え方ができる、というだけにすぎない。
たぶん1ヶ月たったら別の手法に向かってるだろう。
http://tomykaira.hatenablog.com/entry/2013/07/10/222012
0504nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
COUNT(*)をレコードの存在チェックのために安易に使うべからず
http://ameblo.jp/archive-redo-blog/entry-10035200905.html

counter_cache
http://wiki.usagee.co.jp/ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Active%20Record%20Associations
0505nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
>>499
500msかかってるページで100sqlほど

1300msかかってるところで80sqlほど

1500msかかってるページで30sqlほどですね←sqlクエリ少ないのに何故か時間がかかってる

>>496にも書いたように

特定テーブル5種類>それぞれのテーブル特定レコード10個づつ

これをeachで回して
それぞれのレコードをレンダリングで呼び出しています

レンダリングしている内容にcountやら様々な情報が含まれています

それとCanCanのload_and_authorize_resourceを使っているのですが

これが重くなっている理由とかになり得ませんか?
0506nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
>>499
マスタテーブルが複数あります。 

特定レコードの各項目にはそのマスタテーブルのidで保持させている場合だと
特定レコードを1つ表示させるごとに
その項目の数だけsqlが発行されるのは仕方ないですよね?

たとえば

【対象テーブル】生徒 
【マスタテーブル】性別 血液型 都道府県 

で生徒を10件表示させようとしたとき
生徒テーブルにはseibetsu_id、ketsuekigata_id、todoufuken_idに数値が格納されているので

生徒1件につき少なくとも3回のsql発行
生徒10件の表示だと30回のsql発行になりますが、これが普通の設計方法じゃないのでしょうか?

どうやらこれが原因で遅くなってそうですね。。。
0507nobodyさん2013/07/17(水) NY:AN:NY.ANID:???
counter_cache
0508nobodyさん2013/07/17(水) NY:AN:NY.ANID:y2fD7JwW
前提:Mysql(InnoDB)でcount(1)はテーブルスキャンが発生して遅い
http://qiita.com/tachiba@github/items/797ea74e7eeb7f32f886
■ このスレッドは過去ログ倉庫に格納されています