【RoR】Ruby on Rails Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/01/11(土) 20:04:00.68ID:???http://kohada.2ch.net/test/read.cgi/php/1382097427/
http://unkar.org/r/php/1382097427/
■参考サイト
<英語>
本家: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
0792nobodyさん
2014/07/29(火) 20:40:27.84ID:???3c3
< worker_processes 1
---
> worker_processes 17
https://github.com/mirakui/tuningsan
0794nobodyさん
2014/07/29(火) 21:23:21.58ID:???http://b.hatena.ne.jp/entry/s/speakerdeck.com/mirakui/quan-zi-dong-parametatiyuningusan
0795nobodyさん
2014/07/29(火) 21:28:00.59ID:???webサービスを立ち上げた頃に既に idにindexを貼っていました。
そして、その後、add_indexさえすればというバカの1つ覚えで
意味が無いとも知らず同じテーブルの他のカラム(ただしアソシエーションのキーになるもの)
にも貼っておりindexが6種類ほど貼られています。
この状態で
alter table users add index multiple_idx (id, active_at);
を試したところ
mysql> alter table users add index multiple_idx (id, active_at);
Query OK, 9630 rows affected (0.84 sec)
Records: 9630 Duplicates: 0 Warnings: 0
と出ました。その後、indexが効いたか試しても、やはり>>701のように40秒以上かかります
どうしたらいいものでしょうか。。。どなたか分かる方いませんか?
0796nobodyさん
2014/07/31(木) 00:22:53.92ID:RKyjBma/開発環境と本番環境はdb/seeds.rbで作ってますが、テスト環境だとテストのたびに毎回リセットされちゃいます。
そしてこのseedsを入れ込むのに1分以上かかります。
テストのDBの特定のテーブルのデータだけリセットせずにずっと残しておくことは出来ないでしょうか。
0797nobodyさん
2014/07/31(木) 12:06:57.77ID:???dbのやりとりで重くなるとかじゃなくて
レンダリングだけでもクソ重い気がするbootstrapを使ってるせいかな?
0798nobodyさん
2014/07/31(木) 12:13:22.09ID:???CakePHPのほうが圧倒的に速いという
驚愕の事実
0799nobodyさん
2014/07/31(木) 12:29:50.73ID:???0800nobodyさん
2014/07/31(木) 12:47:13.91ID:???違うフレームワークじゃないのか
0801nobodyさん
2014/07/31(木) 14:21:00.11ID:???cakephpは毎回全ファイル読み込むからrailsと同じシステム作ったらrailsより早くなりようがないんだが
0802nobodyさん
2014/07/31(木) 14:36:15.65ID:???それならCakePHPのが早いケースも普通にあるだろうな(3倍くらい早くなる)。
Railsはproduction modeだと、ファイルのメモリキャッシュやるけどプリコンパイルまでしてるわけじゃないからな。
CakePHP + APC >> Rails production > CakePHP > Rails development みたいな感じだと思う。
Rubyはプリコンパイル難しい言語だからな。RubyVM開発者たちの更なる頑張りに期待するしかない。
YARVはRailsではあんま恩恵なかったね;;
0803nobodyさん
2014/07/31(木) 14:57:00.14ID:???例えば、「is_lock」をtrueにしたらそれ以降はupdated_atは更新されないってかんじです
既に動いてしまっているサービスなので別にもう1カラム追加するっての以外で方法があれば教えて下さいお願いします
0804nobodyさん
2014/07/31(木) 18:45:49.26ID:???0805nobodyさん
2014/07/31(木) 18:48:08.87ID:???http://gihyo.jp/dev/column/01/prog/2010/030801?page=2
RailsとCakePHPを比べたところ,高負荷時にはRails のほうが大幅に応答性能が高いという結果が出たことですね。
これは200リクエスト/秒くらいからPHPの応答性能が急激に下がるのが原因です。
Rubyはそれほど大きくはパフォーマンスが落ちないんです。
第4回 Railsに変えてよかった!:iKnow!の場合 | Think IT
http://thinkit.co.jp/article/156/4?page=0,1
3ヶ月、わずか3名程度のエンジニアチームで、彼らはPHPで実装が完了していたレベルに追いつきました。
またコード量はPHPの1/5以下にまで削減されており、よりシンプルな構成も実現できました。
食べログの画面数は約200あるが,開発に取りかかって約2カ月で完成した。
「VBscriptならこの倍,PHPでも1.5倍はかかっていたのではないか」
コード量も10分の1になった。
http://itpro.nikkeibp.co.jp/article/OPINION/20071031/286028/
0806nobodyさん
2014/07/31(木) 19:17:38.94ID:+eUxrmGz長引いてるね。興味あるんでちょっと実験してみた
コンソールであなたが提示してるのとほぼ同意の、以下のコード動くような環境を作った
page = 1
@communities = Community.get_up_voted(Community)
@codes = Code.includes(:user).where('community_id IN (?)', @communities).order('users.active_at DESC').page(page).per(10)
レコード数はそれぞれ
users: 1000
communities: 1000
codes: 100000
Community.get_up_votedは、適当なCommunityを100件戻すようにした。
が、0.1秒以下で結果が戻ってくる。流石に件数が少なすぎるのかもしれん。
それぞれの大体のレコード数 教えてくれ。
あと、Community.get_up_voted では大体何レコード位戻ってくる?
0807nobodyさん
2014/07/31(木) 20:38:11.55ID:???ありがとうございます
レコード件数は以下の通りです
Users 10000件
Communities 100件
Codes 10000件
Votes 100000件
0808nobodyさん
2014/07/31(木) 21:17:29.48ID:???@communities = current_user.get_up_voted(Community)
です
@communities = Community.get_up_voted(Community)
ではありません
0809nobodyさん
2014/07/31(木) 21:52:53.44ID:???current_user.get_up_votedの部分は要はいくつかのCommunityを戻すことが目的のメソッドよね?
で、ここはボトルネックにはなってない(ハズ)なので、適当に書いた。
特殊な処理してない限りは違いは現れないはず。
users 10000, codes 10000 でやっても 0.1秒以下で終わる。
explainの結果も、あなたが>>732で提示したのと全く同じ状態。
疑問を狭めるため、いくつか質問。
1. @communities の中身って CommunityのArray?それともActiveRelationオブジェクト?
2. sql = Code.includes(:user).where('community_id IN (?)', @communities).order('users.active_at DESC').page(page).per(10).to_sql
をやって、sqlの内容を教えて欲しい。
0810nobodyさん
2014/07/31(木) 22:47:39.55ID:O8Sk0a9qrandom.new.rand.quo
で解決しないか?詳しくないのでテキトーだが
0811nobodyさん
2014/08/01(金) 00:36:36.64ID:???マクロ化できないのでしょうか?
bundle exec rake assets:clean Rails_Env=production
bundle exec rake assets:precompile Rails_Env=production
0813nobodyさん
2014/08/01(金) 01:10:12.28ID:???0814nobodyさん
2014/08/01(金) 21:16:44.69ID:???ありがとうございます。回答いたします。
1. おそらくActiveRelationのオブジェクトだと思われます。
ActsAsVotableというgemの関数を使っています(https://github.com/ryanto/acts_as_votable)
2.
SELECT `codes`.* FROM `codes` WHERE (`codes`.`deleted_at` IS NULL) AND (community_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,25,28,29,30,66,67,71,87,90)) ORDER BY users.active_at DESC LIMIT 10 OFFSET 0
0815nobodyさん
2014/08/01(金) 21:24:43.06ID:???ハードウェアの機種や型番、ソフトウェアの名前、バージョンを書く。
正確なエラーメッセージ、エラー番号を書く。
投稿する前に、誤字や文章の誤りがないか、説明が不足していないか、よくチェックする。
投稿後に間違いや説明不足に気が付いたら、訂正、追加説明をする。
わからない言葉があったら、質問する前にマニュアルや検索サイトで調べる。
回答をもらったら、他の人の参考になるように、結果を詳しく書く。
ネットの利用方法やマナーについてわからないことがあるときは、友人や家族などの身近な人にも必ず相談する。絶対に一人だけでやろうとしてはいけない。
http://www.geocities.jp/stardust774/
0816nobodyさん
2014/08/01(金) 21:39:28.87ID:???<% @codes.includes(user: :user_profile).each do |code| %>
<%= render 'codes/code', { :code => code, :icon_photo => code.community.community_icon } if code.community %>
<% end %>
Viewで↑となっていたものを↓にしたら即座に表示されるようになりました(それでも遅いですが・・・)
<% @codes.each do |code| %>
<%= render 'codes/code', {:code => code, :icon_photo => code.community.community_icon} %>
<% end %>
何が悪いのか分かりませんが、ありがとうございました。
0817nobodyさん
2014/08/01(金) 21:46:44.69ID:???ただし、この1ページを読み込むのに若干遅く感じます。
profileではこんなかんじです。
これってやっぱり遅いですよね?
http://i.imgur.com/Ee9OFB0.png
0818nobodyさん
2014/08/01(金) 22:26:26.47ID:???非会員にもゲストとして書き込めるようなロジックって組めますか?
Users
Comments
の各テーブルを作成していて
現在、Commentsにはuser_idがあります
User has_many :comments
ですがcommentを作成したら通常は自動的にcurrent_user.idが入りますよね。
ログインしていないゲストがcommentレコードのuser_idをnilにして書き込めるようにするには
アソシエーションも含めて、どのようにすればいいですか?
0819nobodyさん
2014/08/01(金) 22:36:22.87ID:XiYD0/qY0820nobodyさん
2014/08/01(金) 22:38:35.47ID:???ログインしていない状態では名無しさん専用userを設定するという方法
もある。いちいちnil判定しなくてよくなる(NullObjectパターン)。
http://kohada.2ch.net/test/read.cgi/php/1359587251/
0822nobodyさん
2014/08/02(土) 15:06:12.27ID:???ボトルネックになってるとこをちゃんと特定してから質問してくれよw
グッタリだよ orz
調査のやり方は教えたはずなので、
@codes.includes(user: :user_profile).each だとなんで重いのか、
そのページの表示に1115msかかるのはなぜかは自分でやってみてくれ。
0823nobodyさん
2014/08/02(土) 17:30:52.08ID:???掲示板やメーリングリストを、パソコンオタクが集まる無料のサポートセンターと考え、大いに利用しようと思っている。
http://www.geocities.jp/stardust774/
0825nobodyさん
2014/08/02(土) 21:19:34.16ID:???Railsってそんなに速くなりますか?
0828nobodyさん
2014/08/02(土) 21:29:54.23ID:???手を動かさずに回答をもらえると思うな
0830nobodyさん
2014/08/02(土) 23:21:55.29ID:???0831nobodyさん
2014/08/04(月) 03:15:17.09ID:b+2fcpSQそれに、みんなチンポしごいてるから、だれも答えられないよw
0832nobodyさん
2014/08/04(月) 17:42:24.55ID:???掲示板やメーリングリストを、パソコンオタクが集まる無料のサポートセンターと考え、大いに利用しようと思っている。
http://www.geocities.jp/stardust774/
0833nobodyさん
2014/08/04(月) 17:52:26.45ID:???0835nobodyさん
2014/08/06(水) 22:16:05.77ID:???@articles = Article.all.includes(:categories)
これでN+1は回避できますが、いざView側で
@articles.each do |article|
article.categories.order(:text) each do |category| ....
end
こんなことしてしまうと、N+1になってしまうんです・・・
RubyのArray#Sortは文字の並べ替えはできませんし・・・・
どうすればいいのでしょうか
0836835
2014/08/07(木) 01:21:59.32ID:???0837nobodyさん
2014/08/10(日) 19:44:17.39ID:Cr4W8B/vこれよりさらに高速化するには、sql直書きなど方法があると思うのですが、既に御経験済みの方に質問ですが、どういったコードでやられてますか?
おそらくどちらも通過していないと質問と回答がかみ合わないと思いますので、gem、それより進化型の書き方に到達された方限定で質問させていただきたいと思います。
自分でも目下調査中ですが、宜しくお願い致します。
0838nobodyさん
2014/08/10(日) 20:05:09.82ID:???やっぱりsql使えるところはそっちのがいいのかね。
0839nobodyさん
2014/08/10(日) 20:14:32.42ID:Cr4W8B/v>>837についてのコメントでしょうか?
validationやら色々ついていて、それはそれでいいのですが、大量に処理する時は色々はしょった方が早いこともあるようですね。
大量のINSERTでは、gemもあるのですが、それよりさらに早いやり方があり、それは直書きを使ったもののようです
0840nobodyさん
2014/08/10(日) 20:26:10.26ID:???0841nobodyさん
2014/08/10(日) 23:38:56.35ID:???掲示板やメーリングリストを、パソコンオタクが集まる無料のサポートセンターと考え、大いに利用しようと思っている。
http://www.geocities.jp/stardust774/
0844nobodyさん
2014/08/11(月) 08:31:45.44ID:???http://stackoverflow.com/questions/5317646/mysql-too-many-connections-error-influenced-by-number-of-mongrel-instances
0845nobodyさん
2014/08/12(火) 12:27:37.11ID:???<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp" voice="woman">はじめまして。電話をかけてくれてありがとう!</Say>
</Response>
http://ascii.jp/elem/000/000/790/790902/
0846nobodyさん
2014/08/12(火) 17:18:00.76ID:???railsでwebpayというツールがあります
webpayを使えば自分が代金の受け取り人であれば問題なく使えます
しかし作っているのは仲介サイトですので、受取人/支払人の間に私のサイトがあります
しかも決済時にいくばくかの手数料をいただきたいと思っています
こういった状況下で何か便利なツールはありますでしょうか?
0847nobodyさん
2014/08/12(火) 19:55:17.40ID:???という感じじゃね?
0848nobodyさん
2014/08/13(水) 00:24:57.82ID:???そういったことが可能なのでしょうか?
私がユーザーから送金され、マージンを差し引いて、商店に送金ですか?
送金手数料とか二重にかからんですかね?
0850nobodyさん
2014/08/13(水) 02:05:41.73ID:???変な奴に目を付けられたら終わりだからね
0851nobodyさん
2014/08/13(水) 03:05:09.70ID:???キャンセルやら倒産やら前払い金やら未納やら、引当金必要かもしれませんね
仰る通りrailsの技術云々よりはるかに複雑怪奇な勉強が必要になるかもしれません
技術的にはペイパルなりwebpayなりを使って、「客が商店へ入金・当方がマージンget・商店が客から入金(手数料&当方へのマージン抜き)」これをお手軽な値段でサポートしているんですかね?
こうなると、たしかにrailsの枠をとっくにはみ出していますね
0852nobodyさん
2014/08/13(水) 03:19:27.40ID:???問題は技術的なものでは既にないね
どういうビジネスを組み立てるか、という話だね
ということで別スレで聞くのが妥当かと思われる
0854nobodyさん
2014/08/13(水) 11:19:18.39ID:WAbkpKFvRails.application.config
じゃなくて
Rails.application.configure
になってるのってただのミス?
0855nobodyさん
2014/08/13(水) 22:02:30.84ID:hhXvcPtz【「指ぱっちん」の天才霊能者八意先生に関するサイト】
日本一の天才霊能者の八意先生は埼玉県八潮市生まれ育ちの21歳です。
悩見事があるときや困ったことが起きたら、まず八意先生に相談しましょう。
以下のサイトをすべて読み終わったら、
腹を抱えて大笑いしてしまうことをお約束します(※ は無料心霊写真鑑定)。
お気に入りに追加することをお勧めします。
※ http://blog.goo.ne.jp/nichikon1/e/de94d2f37f7d074e05e306cd33831224
※ http://blog.goo.ne.jp/nichikon1/e/e066fd39cd23872a3c73cf91f4b50b8c
※ http://blog.goo.ne.jp/nichikon1/e/5aac5cd13eafbf5581a7e2ff79b6c16c
※ http://blog.goo.ne.jp/nichikon1/e/93b5c268d3aefeccd92753a7c58a6ded
※ http://blog.goo.ne.jp/nichikon1/e/788f3056778b0f74495648964bfb1d1e
※ http://blog.goo.ne.jp/nichikon1/e/da81f66fa7c437e7ca19667c2bf35065
※ http://blog.goo.ne.jp/nichikon1/e/d9d05d45085c29df2c0e994a4b60d816
※ http://blog.goo.ne.jp/nichikon1/e/475621ba2615792fe2478f597e31b488
http://www.reinou.jp/bai.html
http://www.reinou.jp/rei.html
http://www.reinou.jp/warashi.html
http://blog.goo.ne.jp/nichikon1
http://www.reinou.jp (八意先生の携帯番号はここ。)
八意先生が口にしたことは絶対に起こりません(地震が発生する日付の予想など)
でも、あなたのどんな悩みでも、八意先生が「指ぱっちん」で解決してくれます。
一応、コメントも含めてすべて読んでみてください。
☆コメントの書き込み・誹謗中傷も大歓迎です。☆
0856nobodyさん
2014/08/14(木) 21:30:20.34ID:???条件式ifで年だけとか月だけとか抽出したいのですが、20140814の最初4桁だけ抽出とか5〜6桁だけ抽出する方法を教えてください
文字列のsliceというのは分かるのですが、数字となるとよく分かりません
0857nobodyさん
2014/08/14(木) 21:43:22.65ID:???0858nobodyさん
2014/08/14(木) 22:53:04.97ID:???0859nobodyさん
2014/08/14(木) 22:56:27.81ID:???ifで数字同士比べる回数が多いので、最初に数字にしています
to_iで数字にしているから文字列のsliceは使えないと思うんですが?
0860nobodyさん
2014/08/15(金) 00:54:15.96ID:???0861nobodyさん
2014/08/15(金) 02:24:58.43ID:???0862nobodyさん
2014/08/15(金) 04:23:05.96ID:???20140815%10000/100
0863nobodyさん
2014/08/15(金) 08:08:06.19ID:bAjs3HZL>> 最初4桁だけ抽出
チョメチョメ.year
>> 5〜6桁だけ抽出
チョメチョメ.month
0864nobodyさん
2014/08/15(金) 17:42:44.79ID:???youtubeのサムネイルを再生中に
裏でajaxのリロードをかけて
ページの一部の情報を書き換えようとするとするタイミングで
再生していたyoutubeの動画が止まります
これは仕方ないのでしょうか?
youtubeは再生させつつ
裏でajaxをロードすることは不可能ですか?
0865nobodyさん
2014/08/15(金) 17:49:59.48ID:???Railsとどこに関係があるのか
0866nobodyさん
2014/08/15(金) 22:03:12.41ID:???railsやり始めたんだけど
getでurl受け取りたいんだけど
routesで
get 'apis/geturl/:target' => 'apis#getUrl'
とかやったんだけど
http://example.com/apis/geturl/{ここにエンコードしたURL}
にアクセスするとエンコード文字列のパーセント(%)とかで
うまく値渡せないんだけどどうすればいいの??
0867nobodyさん
2014/08/15(金) 23:14:59.52ID:???0868866
2014/08/15(金) 23:15:44.52ID:???http://example.com/apis/geturl?target={ここにエンコードしたURL}
でいけたわ
0869nobodyさん
2014/08/15(金) 23:55:40.65ID:???サックサクに動かすなら
セグメントキャッシュとか
キャッシュを駆使しなきゃダメ?
なにかコツとかありますか?
0872nobodyさん
2014/08/16(土) 21:58:42.23ID:???さくらVPSの4Gでアプリ動かしてDBサーバー別に設置してるだけでさっくさく動くけどなあ
複雑なリレーション貼ってたりするとまた話は別なんだろうけど
>>871くらいなら何も考えなくてもつまりそうにない気がする
0873nobodyさん
2014/08/17(日) 15:04:46.54ID:???def hoge_params
params.require(:hoge).permit(:title, :text)
end
のようなプライベートメソッドが定義されていました。
これを利用して、そのコントローラのアクション内部で
title = hoge_params[:title]
のような記述で、値を取得している箇所があったのですが
メソッドを配列呼び出ししていることに????となりました。
rubyではメソッドに対して配列呼び出しを行うと
メソッドを実行し、その戻り値を利用して配列呼び出しが行えるというような
認識でよろしいのでしょうか。
助言よろしくおねがいします。
0875nobodyさん
2014/08/17(日) 18:38:10.19ID:???いつも同じ奴じゃん
回答に礼もしないし
0876nobodyさん
2014/08/17(日) 21:38:27.62ID:???> メソッド名を英文字の大文字で開始した場合には括弧は省略できません。
なるほど…。
関数を実行するんじゃなくて関数自体を取得したいときはどうするん?無理??
0878nobodyさん
2014/08/17(日) 23:19:14.20ID:???素のSQL書くわけにもいかないしDBまわりはある程度妥協するとして他には?
0879nobodyさん
2014/08/17(日) 23:54:07.49ID:???JSONだけ返してJSで全て描くようにしたらいい
0880nobodyさん
2014/08/18(月) 03:45:07.85ID:PRdXpwjCと
connection.execute(mysql直書き)
とを組み合わせたら、大量の処理も一瞬でこなすすぐれものになったのですが、
これに落とし穴ってありますか?
何かありましたら教えてください
0881nobodyさん
2014/08/18(月) 07:09:18.04ID:???DBのポータビリティは落ちてるような気がするけど、ActiveRecordの機能を使わない選択肢も
あっていいんじゃない?
0882nobodyさん
2014/08/18(月) 21:33:50.76ID:???0883nobodyさん
2014/08/18(月) 23:45:11.08ID:???ARオブジェクトじゃないと使いづらそうだが。
0884880
2014/08/19(火) 20:01:09.85ID:Zk8d36P8戻り値あるんですか?単にsql実行するだけかと思っていましたが。
かなり複雑な処理をしてcreateを連発ってことをやってて、gemのimportも効果がない案件でした。
10秒かかる処理が0.1〜0.3秒でこなすようになりました。
例外処理を少しやらなければいけないのかもしれません。自分はそこがよく分かっていませんが。
0885nobodyさん
2014/08/19(火) 21:25:23.23ID:???そういうバッチみたいなことならそういうやり方もあるだろうね
メインとなる読み出しの方は普通にActiveRecord使うってこと?
0886880
2014/08/19(火) 22:03:37.04ID:Zk8d36P8当然メインはActiveRecordです。
これ以上出来ないくらい工夫してなお複雑大量の処理をせざるを得なかったので、荒業的に使ってみました。
初なので、これからrescueとか必要ぽいのを研究してまいります
0887nobodyさん
2014/08/19(火) 22:15:58.47ID:???だったらそう書かんと分からんやろ…
0888880
2014/08/19(火) 22:55:09.34ID:Zk8d36P8元々はrescueで書くべき内容について知りたかったので書き込みしたのですが、その点いかがでしょうか?
0889nobodyさん
2014/08/20(水) 00:26:20.76ID:???ありがとう
DB鯖(MySQL)とアプリ(&Unicorn)を分けるだけで
そんなにも早くなるの?
なんかネットワーク越えとかさせると遅くなりそうなイメージだけどなぁ
ちなみに一日あたりのPVはどれくらい?
0890nobodyさん
2014/08/20(水) 08:10:17.04ID:???0891nobodyさん
2014/08/20(水) 10:41:32.34ID:???Hogeモデルに適当なメソッドを作成し
そのメソッド内部でPiyo.find(:all)を書きました。
そのメソッドを適当なViewから呼び出してみたのですが
ActiveRecord::RecordNotFound というような例外が発生し
Piyoモデルのすべてのデータを取得できませんでした。
試しにメソッド内部のコードをPiyo.countに変えてみると
Piyoモデルのカラム数を取得できました。
あるモデルから別のモデルのデータを取得することはできないのでしょうか??
なにかお気づきの点があったらご指摘お願いしますm(_ _)m
0892nobodyさん
2014/08/20(水) 11:48:13.88ID:???■ このスレッドは過去ログ倉庫に格納されています