【RoR】Ruby on Rails Part16
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2013/01/31(木) 08:07:31.27ID:GGHiBszvhttp://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
0809nobodyさん
2013/09/23(月) 15:54:03.03ID:MNsDJ8HM0810nobodyさん
2013/09/23(月) 15:56:35.70ID:MNsDJ8HM0811nobodyさん
2013/09/23(月) 16:36:05.82ID:???>>809
どうもありがとうございます。
<%= select_tag :Test_id, options_from_collection_for_select(Test.all, :id, :name), {:include_blank => true }%>
で出来ました
0812nobodyさん
2013/09/23(月) 21:12:55.51ID:???マイナーでバージョンアップに対応してないgemに依存してるなどの状況がない限り、やめる理由がないかと
0814nobodyさん
2013/09/24(火) 19:29:33.26ID:8nD8zdFn1) Error:
test_should_destroy_b(BControllerTest):
ActionController::ActionControllerError: Cannot redirect to nil!
「A(1)」と「B(多)」二つのモデルがあります。内容はBのdestroyアクションを実行した時に、Bのindexではなく、Aのshowを呼びたいというものです。
(必要な部分を抜粋したのが下記です)
A.rb: has_many :B
B.rb: belongs_to :A
bs_controller.rb:
def destroy
@b = B.find(params[:id]); @a = @b.a; @b.destroy
respond_to do |format|
format.html { redirect_to @a } #ブラウザでは正常にAのshowアクションが呼び出されるが、機能テストではなぜか@aがnilになっている
format.json { head :no_content }
end
end
bs_controller_test.rb:
setup do
@b = bs(:one)
end
test "should destroy b" do
@a = @b.a; assert_difference('B.count', -1) do
delete :destroy, id: @b
end
assert_redirected_to @a #(あるいはassigns(:a)なのでしょうが、そもそもこの検証に辿り着く前にコントローラー側でエラーが出ます。)
end
end
bs.yml: one: a_id: 1
as.yml: one:{} #no column
0815nobodyさん
2013/09/24(火) 22:34:01.92ID:???0816814
2013/09/25(水) 01:21:39.88ID:qN1AVHHO下記のコードに書き直したところ、テストは通りました。
@b.a_idは取得できても、@b.aが参照できていないようです。
has_manyとか、belongs_toが効いてないんでしょうかね・・・
bs_controller.rb:
def destroy
@b = B.find(params[:id])
@a_id = @b.a_id # 機能テストでは@a_idには正常に1が入る
@a = @b.a # 機能テストでは@aがnilになる
@b.destroy
respond_to do |format|
# format.html { redirect_to @a } #ブラウザでは正常にAのshowアクションが呼び出されるが、機能テストではなぜか@aがnilになっている
format.html {redirect_to cart_path(@cart_id)}
format.json { head :no_content }
end
end
bs_controller_test.rb:
・・・
assert_redirected_to cart_path(assigns(:cart_id))
・・・
0817814
2013/09/25(水) 01:22:10.64ID:???気になってテスト用DBを見に行きました。
フィクスチャで生成した行のidは1から順に振られていくものだと思っていたのですが、
ランダムな値がidに指定されているのですね!
sqlite3 db/test.sqlite3
sqlite> select * from A
...> ;
298486374|2013-09-24 15:57:25|2013-09-24 15:57:25
sqlite> select * from B
...> ;
298486374|1|2013-09-24 15:57:26|2013-09-24 15:57:26 # |1|がa_idの部分
それでテスト中でid=1のAを探しても見つからなかったということだったみたいです。
bs.yml: に
one:
a: one
としたところ、無事@b.aが参照されました!
developmentモードでcreateされるAはidが1~順に増えていくので、
テストfixtureでも同様だと思っていました。理由が分かってすっきりしました。
ありがとうございました。
0818nobodyさん
2013/09/25(水) 01:28:16.08ID:???ぼろ儲けするならrails関係の本を書け
0819nobodyさん
2013/09/25(水) 04:11:14.24ID:???kindleで出版してくれ
0820nobodyさん
2013/09/26(木) 07:53:53.72ID:???Railsとなると、VPS借りて鯖構築からしなきゃならんのよね?
セキュリティー対策面とか考えても辛すぎない?
0821nobodyさん
2013/09/26(木) 07:56:28.75ID:???0822nobodyさん
2013/09/26(木) 09:50:29.63ID:SmKIi4WZサーバ立てるのなんてちょっとパソコンに詳しければ簡単にできるんでしょ?
ハードウェアの多重化なんて必要?
企業で使うとかじゃなく個人的に細々と立てたサーバが攻撃されることなんて滅多にないよね?
攻撃が来るって言ったって大した数じゃないんでしょ?
攻撃されたって大したことは起きないんでしょ?
http://b.hatena.ne.jp/entry/tmaeda.s45.xrea.com/20041101.html
0823nobodyさん
2013/09/26(木) 09:58:07.19ID:???0824nobodyさん
2013/09/26(木) 19:46:48.25ID:4SUn4QORControllerは毎回読み込むのでしょうか?
0825nobodyさん
2013/09/26(木) 22:06:46.27ID:???サーバー構築の経験が無い人にはとっつきにくく見えるかも知れないが大した事はやってない。
一度は自分でやってみた方がいい。
うちの会社でも新人の最初の課題でRailsでサービス作らせる。
awsのアカウントだけ教えて、あとはサーバー構築からアプリ作成、gitでのソース管理、デプロイ設定までを丸投げで一通りやらせる。
いい勉強になると思う。
0826nobodyさん
2013/09/26(木) 22:26:51.29ID:SmKIi4WZ前年比約5.6倍と急増しているが、被害にあった企業は攻撃の数カ月後に気づくという無防備なケースは少なくない。
http://sankei.jp.msn.com/west/west_economy/news/130521/wec13052107010001-n2.htm
0827nobodyさん
2013/09/26(木) 23:39:57.86ID:07vtBVXIというか、明らかに別物ですよね・・・
アプリ\vender\bundle\ruby\1.9.1\gems
C:\Ruby193\lib\ruby\gems\1.9.1\gems
Windowsなのですが、コマンドラインからgem installで入れるgemは自分のRubyフォルダのgemsが更新されて、
アプリのgemsは、bundle installで更新するという認識で宜しいでしょうか。
0828nobodyさん
2013/09/27(金) 00:12:23.64ID:ABAcAb8Q0829827
2013/09/27(金) 00:18:17.07ID:GNhY4oM2bundle installで自動でコンパイルさせると、途中でエラーが出るので
手動でコンパイルしたものを使わせたいのですが・・・・
gemfileにはどう書けばいいのでしょうか。
gem 'gem-name', '0-0-0', :path => フォルダ名
これだとなんかダメな気が・・・
0830827
2013/09/27(金) 00:31:07.35ID:GNhY4oM2すいませんでした
0831nobodyさん
2013/09/28(土) 15:03:08.33ID:nedYazf6http://railsroot/blog/article/:id/edit
ここから記事を更新しようとして以下のアクションにpostするとき
Article_Controller#update
:idについては、HTML側の<form><input /></form>の中に値を書いて一緒に送信するしかないのでしょうか?
0832nobodyさん
2013/09/28(土) 15:09:52.87ID:???0833nobodyさん
2013/09/28(土) 17:31:53.81ID:N7y9oC8I0834nobodyさん
2013/09/28(土) 22:30:11.13ID:Wtn6Ig+Rありがとうございます。
なるほど。そうするとparams[:id]が取れるわけですね。
>>833
ありがとうございます。
それは確認用に知っています。
ブログの記事作成と記事更新で、基本的にDRYのために、
なるたけ同じHTMLを再利用したいのですが・・・
Article_Controller#create → ブログ記事の新規作成 POST
Article_Controller#update → ブログ記事の更新 PUT
となっているとき、HTMLの仕様で<form>にはメソッドを一つしか書けないので困っています。
つまり、ブログ記事の新規作成と、ブログ記事の更新では、コントローラーのアクションの振り分け先が違うので、
新規作成と記事更新で、<form>のメソッドだけが異なるHTMLを2つ用意する必要が出てきてしまってるということです・・・
�@type=submitは使わずただのボタンにして、新規作成(POST)か更新(PUT)かはJSで送信先を切り替えて行う
�Atype=submitを使い、JSで<form>のmethodを新規作成(POST)か更新(PUT)かに切り替える
�B<form method=<% @method %>にして コントローラーで新規作成(POST)か更新(PUT)かをレンダリングする。
�C新規作成(POST)と更新(PUT)でHTMLを2つ用意するが、共通部分はpartialにする。
という選択肢を考えましたが、皆さんならどれにされますか?
0836nobodyさん
2013/09/29(日) 10:14:53.26ID:xQXyIa/GURL変わるよ。
0837nobodyさん
2013/10/05(土) 18:14:10.04ID:BJITTvALひょっとするとRailsで使う場合は特別な配慮が必要なのですか?
今は、テンプレート「new」の画面に下記のようなコードを直接書いていて、いじくっている段階です。
昨日までは表示されていたのですが(下記のコードではありませんが)、今日は下記のコードで表示されなくなってしまいました。
いまいち、何を直せば良いのか分からないなので困っています。
下記のようなシンプルなコードでも表示されないということは、Railsで開発していること特有のものなのでしょうか?
ちなみに1IPからのアクセス数制限などは今は設けていません。
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MYAPIKEY&amp;amp;sensor=false"></script>
<script>
var latlng = new google.maps.latLng(38, 135);
var options = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'), options);
</script>
<div id="map" style="width:300px; height:300px"></div>
0838nobodyさん
2013/10/05(土) 18:31:40.97ID:???Railsは無関係
0839nobodyさん
2013/10/05(土) 18:39:04.06ID:BJITTvALそうなんですね!
ありがとうございます。
もう一度調べなおしてみます。
0840nobodyさん
2013/10/05(土) 18:45:53.24ID:vnbnCFn1>?key=MYAPIKEY&amp;sensor=false
ここ実際にはどう書いてあるの?
?key=MYAPIKEY&sensor=false の&がエスケープ(→&)されて
?key=MYAPIKEY&amp;sensor=false になってるの?
?key=MYAPIKEY&sensor=false の & をエスケープした
?key=MYAPIKEY&sensor=false が入っているのが正しいような気がするんだが。
0841nobodyさん
2013/10/05(土) 18:53:48.62ID:BJITTvALこう表示されていたとは!
私のnew.html.erbでは、エスケープされる前の「&」だけです。
先ほど、googleMapの方で質問させていただいていて、その後にrails特有のものなのかと思い、こちらで質問させていただいています。
googleMap板で貼ったコードをコピペして、こちらの質問で使ったので二度エスケープされていました。
すみません。
0842841
2013/10/05(土) 20:59:24.40ID:BJITTvAL単純にhtmlファイルを作ってブラウザに放り投げると表示されます。
もう少しググってみます。
0843nobodyさん
2013/10/05(土) 21:08:29.89ID:???0844841
2013/10/05(土) 21:13:18.90ID:BJITTvALrails4です!
turbolinksとか、そこらへんでしょうか?
複雑そうなのでまだ放置しています^^;
rails4でmaps API使ってる人は、どういう使い方しているのか疑問もありますが、
まずは、pjaxも調べてみます!
ありがとうございます。
0846841
2013/10/05(土) 22:03:25.62ID:BJITTvALturbolinksの切り方から調べてやってみてご報告いたします!
(最終的にはturbolinksを捨てたくはないのですが)
0847841
2013/10/05(土) 22:25:04.48ID:BJITTvAL地図の領域だけ確保され、肝心の地図は表示されない状態です。
一昨日までは表示されてたんだけどな〜^^;
多少コードは違いますが。
0848841
2013/10/05(土) 23:12:50.97ID:BJITTvALただ、色々なサイトからコードを借りてきては試しで、やっていたので、
何をミスしてたのかよく分かりません。
スレ汚しすみませんでした。
rails4でも、GoogleMapsAPIv3を普通に使えると思います。ということが分かりました。
では、また!!
0849nobodyさん
2013/10/05(土) 23:19:09.67ID:???0850841
2013/10/05(土) 23:25:48.19ID:BJITTvAL非常に基礎的にところに絡んでいるとは思いますが、理解できていないので、『なぜか』を教えていただけると非常にありがたいです。
実験段階なので、「new.html.erb」内でやっているのですが、
地図を表示する場所<div>を下記のように<script>の上に書けば表示され、
下に書けば表示されないようです!
多分、シンプルなルールに抵触するかしないかの問題なのだと思いますが、一応フィードバックさせていただきました。
<div id="map" style="width:300px; height:300px"></div>
<script src="http://maps.googleapis.com/maps/api/js?key=MYAPIKEY &sensor=false"></script>
<script>
var latlng = new google.maps.LatLng(32, 135);
var options = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'), options);
</script>
0851841
2013/10/05(土) 23:33:59.20ID:BJITTvAL先ほどまでのvar latlng等のコードを、function initializeに格納して、
google.maps.event.addDomListener(window, "load", initialize);
で呼び出さないといけなかったのかもしれません。
色々な基礎サイトのコードを組み合わせて実験していたため、
GoogleMapsの本に書かれているこのルール?を適用していなかったことが失敗の原因のような気がします。
多分。
ということで、railsにも関係なかったし、初歩的な自爆っぽいです。
度々失礼いたしました。
協力してくださった皆様、ありがとうございます。
0852nobodyさん
2013/10/05(土) 23:48:56.02ID:vnbnCFn1そうなりそうですな。
0853nobodyさん
2013/10/05(土) 23:55:10.96ID:???どういった点でどれくらい生産性が高いのでしょうか?
0854nobodyさん
2013/10/06(日) 23:41:44.54ID:???0856nobodyさん
2013/10/07(月) 00:42:06.17ID:???ケース・バイ・ケースとしか言えない
自分がやる内容について候補となるフレームワークを自分で試して比較するしかない
0857あ
2013/10/07(月) 02:34:03.26ID:???get '/hi' do
"Hello World!"
end
http://www.sinatrarb.com/
http://www.sinatrarb.com/intro-jp.html
0858nobodyさん
2013/10/07(月) 08:02:01.88ID:???delayd_jobで非同期にメール送信をおこないたいと思っています。
以下のように書いて実行したところ
Use MyMailer.delay.mailer_action(args) to delay sending of emails.
というRuntimeErrorが発生してしまいメールを送信できません。
mail = OrderNotifier.received(@order)
mail.delay.send_mail
同じような状況になった方がおられましたらご助言いただけますと幸いです。
よろしくお願いいたします。
0859858
2013/10/07(月) 08:52:01.97ID:???send_mailは.deliverの間違いでした。
メソッドを書き換えて、試行したところ正常に動作しました。お騒がせしましたm(_ _)m
0860nobodyさん
2013/10/07(月) 11:31:06.41ID:owNVQql5Gemfileに記載があるにも関わらず、bundle installを実行しても一部gemがインストールされず、gem listで見てもinstallされていない状態でした
gem installを実行すれば普通に入ったのですが、bundle installで入らないのはなぜでしょうか?
0861nobodyさん
2013/10/07(月) 15:51:48.26ID:???0862nobodyさん
2013/10/07(月) 19:42:42.05ID:DhmF4t2/turbolinksで発動しないことがあるとかいう問題のことですかね?
0863nobodyさん
2013/10/07(月) 19:49:54.55ID:nT1j+vKpいくら個々の画面のテンプレートで$()を使おうとも$がundefinedになってしまうんですが・・・
前任者がいないので質問できないんですが・・・
どうやってテンプレートでjQuery($)を参照すればいいんでしょうか・・・
0864nobodyさん
2013/10/07(月) 20:14:50.83ID:nT1j+vKpヘッダーに移しますもう
知ったこっちゃない
0865nobodyさん
2013/10/07(月) 21:35:56.35ID:6AfHzNSOよるらしい。気にするほどの差じゃないことのほうが多いと思う。
なんか他に末尾に置く理由あったっけ?
0866nobodyさん
2013/10/07(月) 22:29:42.96ID:???0867nobodyさん
2013/10/07(月) 23:00:23.29ID:???リファクタリングだ‼︎
0868nobodyさん
2013/10/09(水) 12:13:56.58ID:0vg+hv+csize見てから処理したいのに、sizeを見た瞬間にCOUNT文が発行されてしまうんです
to_sqlにしてからsql実行すればいいですが、それだと戻り値がPG::Resultなんで、避けたいです
0869nobodyさん
2013/10/09(水) 16:01:18.28ID:???0870nobodyさん
2013/10/09(水) 20:18:56.04ID:???0871nobodyさん
2013/10/10(木) 14:01:28.08ID:J/3rXCMC0872nobodyさん
2013/10/10(木) 22:35:41.39ID:bBHShRNIWHERE sage = "sage"
というクエリを書くとして
class Sample < ActiveRecord::Base
scope :age lambda {|sage|
where (:sage => sage)
}
def self.search(subquery)
find_by_sql("select * from (#{subquery} as foo"))
end
end
class Sample_Controller < ApplicationController
Sample.age("sage").search("select * from hoge")
end
としたらage()の部分が反映されませんでした。
どうすればいいのでしょうか
0873nobodyさん
2013/10/11(金) 00:56:00.53ID:tMZSYaJJ0874nobodyさん
2013/10/11(金) 12:38:44.44ID:???Relationがありません とでます
0875nobodyさん
2013/10/11(金) 17:37:28.01ID:???そういう場合の高速化はどのような方法が考えられますか?
0877nobodyさん
2013/10/11(金) 19:37:43.75ID:???よほど特殊なシステムでない限りViewの部分がボトルネックになるってあんま考えにくい
Viewの内部で重いSQL発行する部分があるんでないの?
1つ1つのSQLは軽くてもN+1が発生してるとかね
マジモンのViewボトルネックなら、キャッシュ使えばいいと思うけど
Viewをキャッシュしなけりゃならんってことの原因はほぼDB
まずはDBの部分で問題がないかチェックしたほうがいい
下手にキャッシュ入れると問題にフタをすることになるし
0878あ
2013/10/12(土) 05:54:58.40ID:Kkx+aXsthttp://qa.atmarkit.co.jp/q/2923
0879414
2013/10/13(日) 01:18:51.59ID:???下記のControllerで
class MailerController < ApplicationController
def sendRegistEmail
retString = "success"
begin
Message.registEmail(params[:email]).deliver
rescue Exception => e
if e.message.include?("User unknown in virtual mailbox table") then
retString = "user_unknown_in_mailbox"
elsif e.message.include?("Name or service not known") then
retString = "name_or_service_not_known"
else
retString = "other_errors"
end
else
retString = "success"
end
end
respond_to do |format|
format.json { render :json => retString }
end
end
ってやってるんだけど、メールサーバーが別に立ててあるんです。
で、エラーを拾いたいんですが、可能でしょうか?
0880nobodyさん
2013/10/13(日) 23:57:29.19ID:???whereメソッドがまったく動作しないんだけど
0881nobodyさん
2013/10/14(月) 00:05:03.62ID:K/zjsz+B0882nobodyさん
2013/10/14(月) 00:47:47.06ID:???@target=Response.find(9199)
@target=Response.where("id='9919'")
上を書くと普通にHTML表示できて下を書くとできない
たすけて〜
0883nobodyさん
2013/10/14(月) 00:56:01.36ID:???でイケるんじゃ
ダメなら
@target=Response.where(id: 9919)
0884nobodyさん
2013/10/14(月) 00:59:41.34ID:???0885nobodyさん
2013/10/14(月) 01:17:03.81ID:ONbSPu7lそれでした!ありがとう!!!
主キーであるはずのidが被ってたのか?
0886nobodyさん
2013/10/14(月) 01:33:01.63ID:K/zjsz+B結果が1個でもwhereで返ってくるのはrelationだよ
0887nobodyさん
2013/10/14(月) 01:54:16.29ID:ONbSPu7lググってやっと理解できました。
whereを書いた時点ではSQLが実行されてなかったんですね。
しつれいしました
0888nobodyさん
2013/10/14(月) 09:45:56.66ID:???find(id)はレコードそのものが返ってくるが、whereの場合は(遅延評価の結果)配列が
返るのでfirstが必要ということ
0889nobodyさん
2013/10/14(月) 11:19:48.67ID:g928WVivdelete destroy
0890nobodyさん
2013/10/14(月) 20:22:20.04ID:???以下のように処理を書きたいのですが、行き詰まってしまったので質問させてください。
以下、コントローラーに記述したい処理のの概要です。
1. 関連するモデル(model_a, model_b)をbuildする
2. ネストしたフォームを利用して(model_a, model_b)に何らかの処理をおこない同時に保存する
3. 1でおこなったbuildを解除(表現がわかりませんが)する
4. 関連するモデルのうち、一方だけ(model_a)だけに何らかの処理をおこなう
5. 関連するモデルのうち、一方だけ(model_a)だけを保存する
上記の概要-3の、「3. 1でおこなったbuildを解除(表現がわかりませんが)する」ことはできるのでしょうか?
的はずれな質問をしてしまっているかもしれませんが、よろしくお願いいたします。
0891890
2013/10/15(火) 05:18:33.35ID:???0892nobodyさん
2013/10/15(火) 19:56:24.58ID:hUiiEC+Ahttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/411331
0893nobodyさん
2013/10/15(火) 20:48:05.43ID:hUiiEC+AJason Fried, David Heinemeier Hansson: 洋書
http://www.amazon.co.jp/gp/product/0804137501
0894あ
2013/10/16(水) 06:53:25.24ID:lbEgPcdoJust 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:lbEgPcdohttp://www.amazon.co.jp/gp/product/4794207433
0896あ
2013/10/16(水) 11:21:46.35ID:lbEgPcdoRubyは死にかけ言語です。
http://rubini.us/2013/10/15/introducing-rubinius-x/
翻訳
http://translate.google.co.jp/
0897nobodyさん
2013/10/16(水) 11:36:37.37ID:lbEgPcdohttp://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:???会員がページ遷移する度に会員のログイン日時が更新されるようにしてます(秒単位)
仮に100人がログインしていたとして、それぞれがいろんなページを遷移したとしたら、かなりの勢いでデータベース(ログイン日時)の読み込みと書き込みが頻繁に行われます。
こういった構造は通常ではありえないでしょうか?
たった20〜30人ほどが閲覧してるだけのようなのですが、サイトが固まってしまいます。
タスクパフォーマンスを見るとApacheが沢山発生していて、それぞれがそこそこメモリを食ってるようです。
仕方なくアパッチを再起動すると直りますが…
それともサーバーのメモリが1GBだと少なすぎますか?
Rails3.2、Apache2、Passengerを使用しています。
Apacheに以下のようにPassengerの設定をしています
PassengerMaxPoolSize 30
PassengerPoolIdleTime 1200
何が原因になってフリーズしてしまうのか原因を特定したいのですが何かいい方法はありますでしょうか?
0899nobodyさん
2013/10/16(水) 12:17:32.78ID:???Passenger使ってないからメモリの問題はわからんけど
redisくらいの書き込み性能を持つデータベースなら毎回更新させても問題ない
ただログイン情報を持つようなテーブルを毎回更新させるとクエリキャッシュが全く効かなくなるから
更新日時は別のテーブルに分離したほうがいい
0900nobodyさん
2013/10/16(水) 12:24:57.56ID:???redisは使っておらずデータベースはMySQLです
更新日時のカラムはUserテーブルに設けています。
これは問題ですか?
関連テーブルにおいたほうがいい?
0901nobodyさん
2013/10/16(水) 12:29:19.92ID:???MySQLは更新が遅いからパフォーマンスへの影響が大きすぎる
状況によって異なるけどredisはオンメモリだからMySQLの100倍くらい高速
Userテーブルはログインチェック等で頻繁に読み込むのに毎回更新すると
MySQL側でキャッシュが毎回削除されて、パフォーマンスが落ちる
0902nobodyさん
2013/10/16(水) 12:36:17.81ID:???非常に参考になります
ありがとうございます
ログイン日時カラムは別テーブルに移した方がよさそうですね。
ページ遷移ごとにUserのログイン日時カラムを更新すると、たかだか20〜30人程度を捌くのも困難なのでしょうか?
Railsってそんなもんなのでしょうか?
私の見解ではRedisはmemcachedのようなものと把握しているんですが
ここからどういうふうにデータベースに反映させて、他のユーザーに最新の情報(他人の最新ログイン日時情報)を見せられるでしょうか?
0903nobodyさん
2013/10/16(水) 12:40:02.74ID:???タスクマネージャーでApacheが大量発生してるならPassengerの問題のように感じるけど
仮にアプリケーションが問題だとしたらRailsというよりもActiveRecordの問題だから
ARを経由せずに生のSQL書けば幾分解消される可能性がなくはないはず
RedisはRailsからActiveRecordのように使えるライブラリがあるから
ほとんどMySQLと差異なく使用できるはず
0904nobodyさん
2013/10/16(水) 13:11:30.25ID:lbEgPcdoシーク時間はシーク範囲によって異なりますが、仮に 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ハードディスクでは数百から千ぐらいの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
0907nobodyさん
2013/10/16(水) 14:37:01.72ID:lbEgPcdoフラッシュストレージはサーバの能力を劇的に向上させます。
例えばニコニコ動画を運営するドワンゴでは、動画のキャッシングサーバの台数を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:lbEgPcdohttp://hesonogoma.com/hardware/fusion-io_iodrive_pricelist_2012.html
レス数が900を超えています。1000を超えると表示できなくなるよ。