【RoR】Ruby on Rails Part12
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/07/19(火) 13:44:46.30ID:zxrusyvr【Ruby】Ruby on Rails Part11
http://hibari.2ch.net/test/read.cgi/php/1292032736/
■参考サイト
<英語>
本家: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://twitter.com/dhh
http://www.loudthinking.com/
0101nobodyさん
2011/07/25(月) 12:12:33.69ID:???すぐ使えるような組み込み型のモジュールとかってあるんですか?
あるとしたら、こういうタイプの組み込み型モジュールの呼称って何ですか?
0102nobodyさん
2011/07/25(月) 12:20:36.38ID:eJ//7zAn0103nobodyさん
2011/07/25(月) 12:42:20.17ID:???ありがとう!調べてみたらログイン用とかあるんですね。
普通はwebサービスとか作る時って
自分で一から作るものですか?
それともこういったエンジンを部分利用して作業を極力軽減するのかな?
0104nobodyさん
2011/07/25(月) 12:53:52.76ID:???ただし、このフィールドは
英字のみだったり、
英数のみだったり、
半角のみだったり、
数字4桁+数字4桁+数字4桁だったり、
全角可能だったりと
フォーム入力時点のユーザー毎にバリデーションが異なります。
こういうのって標準のバリデーションではなく
正規表現を使って、それぞれのバリデーション検証を行うのが正しいですか?
また、そのユーザーのバリデーションパターンを決めるのも第三者が
フォーム入力で決めていく形です。
どういう流れに持っていくのが一般的ですか?
010513
2011/07/25(月) 14:01:51.45ID:IAHMsfps<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>
を
<% @vegetables = Vegetable.find(:all, :conditions=>[@condition]).each do |vegetable| -%>
としましたが、結果は同じでした。
@conditionが別に定義されているかも知れないので@cndなど別の変数にしたが結果は同じでした。
undefined method `%' for ["[\""]:Arrayというエラーはググッても1件も出てきません・・・。
当方Rails2.3.8です。
宜しくお願い致します。
0106nobodyさん
2011/07/25(月) 16:34:48.91ID:???Rails2.3.8で似たようなコードを書いてもエラーにはなりませんでした。
そもそも、[ "[\"" ] というlength=1の配列はどこから来ているのかが気になりますね。
@conditionの定義部分でタイポとかないでしょうか?
010713
2011/07/25(月) 16:45:54.91ID:IAHMsfpsvegetables_controller.rbに
if params[:hinmoku_id]
@cnd = []
@cnd << ["[ \""]
@cnd << ["hinmoku = ? "]
end
と、直書きしてます。
でも@cnd << ["[ \""]を削っても、
undefined method `%' for ["hinmoku = ? "]:Array
となって同じでした。
0108nobodyさん
2011/07/25(月) 16:53:52.10ID:???としたいんですよね。
であれば、<< ではなくて、+= じゃないですかね。
controllerで、
logger.debug @cnd.inspect
や
viewで
<%=h @cnd.inspect %>
で見てみると、@cndが2重配列になっていると思います。
0109nobodyさん
2011/07/25(月) 17:22:43.37ID:???と、根本的なところですが、Viewでfindとかを書くのはあまり推奨されないので、
こんな感じでリファクタリングしていくと良いかなと思います。
Rails2.3.4から標準で入っているnamed_scopeと
named_scopeをデフォルトで色々定義してくれるsearchlogicというpluginを使って
https://github.com/binarylogic/searchlogic
1回目のリファクタリング
[controller]
search = Vegetable
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
@vegetables = search.all
0110nobodyさん
2011/07/25(月) 17:24:50.46ID:???このままだとcontrollerが肥大化してしまうので、modelに回します。
2回目のリファクタリング
[controller]
@vegetables = Vegetable.search(params).all
[model]
class Vegetable
def self.search(params={})
search = self
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
search
end
end
0111nobodyさん
2011/07/25(月) 17:26:08.12ID:???modelのメソッドをArrayのinjectと、文字列からメソッド発行ができるsendを使ってスリムに
[model]
class Vegetable
def self.search(params={})
[:hinmoku_id, :kaikyu_id, :kikaku1_id, :kikaku2_id].inject(self){|search, param| params[param].blank? ? search : search.send("#{param}_eq",params[param]) }
end
end
動作未検証ですが、参考までに。
011213
2011/07/25(月) 17:42:26.98ID:IAHMsfps<%=h @cnd.inspect %>
でみると、
["\"", "hinmoku = ? ", "and kaikyu = ? ", "and kikaku1 = ? ", "and kikaku2 = ?", "\"", ", '", "バナナ", "'", ", '", "2L秀", "'", ", '", 5, "'", ", '", "個ネット", "'"]
になってました。
でも、"とか\を取ると、それはそれで動かなくなるんですが、
根本的に記載方法を間違えているのでしょうか???
011413
2011/07/25(月) 17:58:53.48ID:???書き込み気付きました。
のちのちのメンテを考えるときれいにしときたいので、
頂いたアドバイスをもとに頑張ってみます
0115nobodyさん
2011/07/25(月) 17:59:48.06ID:???[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
になるようにゴリゴリ書けば、
@cnd_first = []
@cnd_last = []
[hinmoku]
@cnd_first << "hinmoku = ?"
@cnd_last << "タマネギ"
[kaikyu]
@cnd_first << "kaikyu = ?"
@cnd_last << "L"
@cnd = [@cnd_first.join(" and ")] + @cnd_last
でいけるかな
011613
2011/07/25(月) 18:01:29.60ID:???[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
を再現するように、
["を書くために"[\""て書きました。
0117nobodyさん
2011/07/25(月) 18:05:55.04ID:???Rail がどーたら言う前に、Ruby を勉強した方がいいよ
その方が問題解決にはずっと近道だし、今後似たようなことで悩まなくてよくなるから
0118nobodyさん
2011/07/25(月) 18:17:18.52ID:eJ//7zAnテッチャン☆ぶろぐ: [Rails]searchlogic v2でテーブルのソート的なもの。
http://shasou.blogspot.com/2010/02/railssearchlogic-v2.html
スリムになったSearchlogic v2をいじってみた - MothProgのうしろがわ
http://d.hatena.ne.jp/mothprog/20090819/1250692210
https://github.com/binarylogic/searchlogic
http://asciicasts.com/episodes/176-searchlogic
0119nobodyさん
2011/07/25(月) 18:46:03.06ID:G/8niHgCstudents = Student.scoped_by_name_and_grade("Ana", 2).all
ttp://d.hatena.ne.jp/mothprog/20090819/1250692210
0120nobodyさん
2011/07/25(月) 18:51:27.50ID:eJ//7zAnhttp://railscasts.com/episodes/176-searchlogic
Episode 111: Advanced Search Form
http://railscasts.com/episodes/111-advanced-search-form
Make searching and ordering data in your application trivial
https://github.com/binarylogic/searchlogic
0121nobodyさん
2011/07/26(火) 11:05:09.95ID:???0122nobodyさん
2011/07/26(火) 11:54:53.75ID:???サインアップなら分かるが
0124nobodyさん
2011/07/26(火) 12:17:22.22ID:???このへん?
https://github.com/plataformatec/devise/wiki/How-To:-Use-Recaptcha-with-Devise
Google の Recaptcha を使うようだが
0125nobodyさん
2011/07/26(火) 12:31:51.33ID:QroQWCDshttp://jokami.mydns.jp/2011/05/25/railsrailsmysqlで文字セット照合順序(collation)を変更する/
0126nobodyさん
2011/07/26(火) 12:40:36.04ID:???これって、ただのキャプチャ単体ですよね?
探してるのはキャプチャが組み込まれているログイン管理・新規登録機能プラグインです。
0128nobodyさん
2011/07/26(火) 13:08:32.65ID:???友達のおばちゃんに言われた。
0129nobodyさん
2011/07/26(火) 13:54:41.22ID:QroQWCDsreCAPTCHA: Stop Spam, Read Books
http://www.google.com/recaptcha
Google Acquires reCAPTCHA
http://mashable.com/2009/09/16/google-acquires-recaptcha/
0130nobodyさん
2011/07/26(火) 14:01:13.57ID:QroQWCDshttps://github.com/ambethia/recaptcha
0131nobodyさん
2011/07/26(火) 14:38:52.54ID:???0132nobodyさん
2011/07/26(火) 14:40:49.73ID:???0133nobodyさん
2011/07/26(火) 14:51:18.42ID:???0134nobodyさん
2011/07/26(火) 17:19:42.49ID:QroQWCDshttp://www.doexpert.net/a/4e1754e4592b0a27c02867dc
http://b.hatena.ne.jp/t/searchlogic?sort=eid
0135nobodyさん
2011/07/26(火) 21:29:54.59ID:???サインアップで間違っても、編集ページで直せば良いじゃん。ってことなんだろつ。
0136nobodyさん
2011/07/27(水) 22:35:28.41ID:ZS4k7BV+http://slim-lang.com/
0137nobodyさん
2011/07/28(木) 09:43:39.08ID:???ここ、開けないんだけどなんでだろ?
本のサンプル落としたいのに・・・・。
0138nobodyさん
2011/07/28(木) 12:05:30.82ID:???rails3.x
それぞれでの
主流のログイン認証プラグインとgemって何がある?
出来れば今もサポートされてるので。
0139nobodyさん
2011/07/28(木) 12:08:05.40ID:???http://ruby-toolbox.com/categories/rails_authentication.html
0140nobodyさん
2011/07/28(木) 23:53:05.56ID:4Q9csvAmhttp://www.youtube.com/watch?v=ohHdZXnsNi8
0141nobodyさん
2011/07/29(金) 00:13:17.03ID:Tkg/4Pbbhttps://github.com/vigetlabs/simplest_auth
0142nobodyさん
2011/07/29(金) 02:46:50.92ID:Tkg/4PbbGithubにソースコードがあったらボタン1つでデプロイすることが出来る。
http://www.ninxit.com/blog/2011/07/28/python-flask-fluxfle/
One Click Install Software Library
WordPress 3.1.3 (Japanese)
Redmine 1.2-stable
http://www.fluxflex.com/library
fluxflex ドキュメント
http://jp.doc.fluxflex.com/
http://www.youtube.com/watch?v=iyqWyZVXl6g
0143nobodyさん
2011/07/29(金) 15:17:50.97ID:NreIb2basubmitボタンを2つにしてそのままupdateと新規insertにしたい。
もしくはレコードのコピー+idの採番
をしたいのですが、どうやったら可能でしょうか?
0144nobodyさん
2011/07/29(金) 15:31:54.32ID:Tkg/4Pbbhttp://www.slideshare.net/kaznum/railstips
Gregg PollackとScaling Railsのハウツー
1つには、Railsアプリケーションをうまくスケーリングするために必要なすべての情報をRails開発者に与えること。
開発者は、これらの技術を使用する必要はないかもしれません。
しかし、できれば、開発者がビデオを見て、何百万人の同時ユーザーを扱うRailsアプリケーションを
作成できます、とクライアントに言える自信を持ってもらいたいのです。
2番目に、Railsアプリケーションをスケーリングすることがどれほど簡単かを、他の言語の開発者に示すこと。
http://www.infoq.com/jp/articles/gregg-pollack-scaling-rails
Ruby Proxies for Scale, Performance, and Monitoring
http://www.slideshare.net/igrigorik/ruby-proxies-for-scale-performance-and-monitoring-gogaruco-igvitacom-1396734
osc2008_opensuse-moonlinx.pdf (application/pdf オブジェクト)
Perlbal
http://blog.geeko.jp/wp-content/uploads/2008/09/osc2008_opensuse-moonlinx.pdf
0145nobodyさん
2011/07/29(金) 17:33:27.53ID:NreIb2baもしくは、indexのshow | edit | destroyにcopyとつけても良いです。
試しにlink_to '複製', new_vegetable_path(vegetable)としたら
真っ白になりました・・・。
0146nobodyさん
2011/07/29(金) 19:43:08.17ID:Tkg/4Pbb毎秒 1000 アクセスはクリア。CPU の使用率は 25% 前後
http://techblog.heartrails.com/2011/01/rails-nginx.html
0147nobodyさん
2011/07/29(金) 19:50:18.37ID:Tkg/4Pbbhttp://www.aubetec.com/hiruneko/blog/archives/2007/05/apachedosmod_evasive.html
mitukiii.jp | UbuntuのApacheにDOS攻撃を回避するmod_evasive入れた
http://mitukiii.jp/2010/12/19/ubuntu-apache-install-mod-evasive/
Apache DoS攻撃対策 mod_evasiveインストール | Satake Studio Developer's Blog
sudo apt-get install libapache2-mod-evasive
http://dev.satake7.net/2010/05/05/apache-dos攻撃対策-mod_evasiveインストール/
http://blog.bodhizazen.net/linux/how-to-mod_evasive-ubuntu-904/
0148nobodyさん
2011/07/29(金) 21:08:00.14ID:JxuS3wynsubmitに名前を付けておいて受け取った側で識別、
createとupdateを呼び分ける。
0149nobodyさん
2011/07/30(土) 01:02:16.68ID:???copyの方がviewの無理がないので、自分ならそっちにします。
newに飛ばしても当然ダメなので、controllerにmethod追加かな。
0150nobodyさん
2011/07/30(土) 01:18:55.43ID:K7JH1lDjO'Reilly OSCON Java 2011, Raffi Krikorian, "Twitter: From Ruby on Rails to the JVM"
http://www.youtube.com/watch?v=ohHdZXnsNi8
OpenFeintジェイソン・シトロンCEOに独占インタビュー/Tech総研
ちなみに、僕らのプラットフォームは、Ruby on Railsで開発されています。
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001896
Airbnb: Which programming languages does Airbnb use? - Quora
http://www.quora.com/Airbnb/Which-programming-languages-does-Airbnb-use?
Inside Groupon: RailsConf 2011 - O'Reilly Conferences, May 16 - 19, 2011, Baltimore, MD!
http://en.oreilly.com/rails2011/public/schedule/detail/17691
Hulu is built on Ruby on Rails.
http://techcrunch.com/2008/01/24/hulu-discusses-private-beta-suggests-public-launch-time-frame/
http://ruby50.com/
0151nobodyさん
2011/07/30(土) 07:35:59.46ID:K7JH1lDjhttp://www.rubyinside.com/21-ruby-tricks-902.html
19 Rails Tricks Most Rails Coders Don't Know
http://www.rubyinside.com/19-rails-tricks-most-rails-coders-dont-know-131.html
0152143
2011/07/30(土) 13:14:39.45ID:4R4YZGj/[view]のindexに、show | edit | destroyにcopyを追加
link_to 'copy', vegetable, :action => :copy, :method => "POST"
[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])
# respond_to do |format|
# format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
# format.xml { head :ok }
# end
respond_to do |format|
format.html { render :action => "index" }
format.xml { render :xml => @vegetables }
end
end
[error]
白い画面に
Unknown action
No action responded to 11. Actions: copy, create, destroy, edit, index, new, search, show, and update
とでて動きません・・・。
0153nobodyさん
2011/07/30(土) 13:57:37.37ID:jkxkSy7wRESTルーティング書いた?
resources :vegetables do
member do
post :copy
end
end
と書くと、 copy_vegetable_url(id) or copy_vegetable_path(id) を使って
/vegetables/:id/copy に POST できるとおもう。
0154143
2011/07/30(土) 14:44:49.60ID:4R4YZGj/route.rbに以下を書いていました。
map.connect 'vegetables/copy', :controller => 'vegetables', :action => 'copy'
頂いたコードを記入しましたが、動きません。当方Rails2.3.8です。
0155nobodyさん
2011/07/30(土) 15:02:20.15ID:jkxkSy7wエラーメッセージをよく見ると、copy はアクションの一覧にあるな。
でもって 11 がアクションだと見なされているように見える。
link_to 'copy', vegetable, :action => :copy, :method => "POST"
は、
link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post'
だろうか、と思ったが、link_to(=アンカー要素)でPOSTって出来るの?
3系のUnobtrusive JavsScriptを使った奴は裏でformをつくってそこからPOSTしてくれるけど。
あと、とりあえず rake routes。
0156nobodyさん
2011/07/30(土) 15:06:04.33ID:jkxkSy7w0157143
2011/07/30(土) 15:17:12.42ID:4R4YZGj/あと、indexの記述を頂いた↓にしました。
link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post'
エラーは、↓になりました。
ActiveRecord::RecordNotFound in VegetablesController#copy
Couldn't find Vegetable with ID=1989628
このIDはなんぞ?レコード数は、まだ15です。
0158143
2011/07/30(土) 15:20:40.70ID:???わざわざダウングレードして使ってるんです。rubyも1.8.7だし。
これから覚え始めるのなら3系の1.9が良かったのかも・・・。
0159143
2011/07/30(土) 16:30:59.00ID:4R4YZGj/link_to 'copy', :action => :cppy, :id => :vegetable.id, :method => 'post'
を
link_to 'copy', :action => :copy, :id => vegetable.id, :method => 'post'
とvegetable.idの前の「:」を取ったらエラーがなくなりました。
が、複製は動きません。
indexの「copy」のリンクは下記が生成されています。
http://127.0.0.1:3000/vegetables/copy?id=10&method=post
コントローラは下記です。
[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])
respond_to do |format|
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
end
end
0160nobodyさん
2011/07/30(土) 16:51:22.80ID:jkxkSy7wrake routes は実行すること自体にdb:migrateのように意味があるわけではないので、
出力に意図する規則が定義されているかを確認したのでなければやった意味がない。
vegetables/copy という規則はあるのかな?
0161143
2011/07/30(土) 17:28:27.49ID:4R4YZGj/indexに足された1レコードが増えて再レンダされればいいという感じで、
respond do でそのままindexを実行するように書いているつもりです。
(デフォルトのdef deleteのコピペですが)
0162143
2011/07/30(土) 17:44:47.80ID:???下記のようにしたら、空のレコードがinsertされるようになりました。
あと少しっぽいのですが・・・。
respond_to do |format|
if @vegetable.save
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
else
format.html { render :action => "index" }
format.xml { render :xml => @vegetable.errors, :status => :unprocessable_entity }
end
end
0163nobodyさん
2011/07/30(土) 18:38:07.83ID:jkxkSy7w同じ情報でnewして保存するだけだよね?
0164nobodyさん
2011/07/31(日) 17:33:31.50ID:hcUrE+vchttp://robots.thoughtbot.com/post/8135270582/code-review-ruby-and-rails-idioms
0165nobodyさん
2011/07/31(日) 19:05:07.22ID:hcUrE+vchttp://ontwik.com/rails/oreilly-oscon-java-2011-raffi-krikorian-twitter-from-ruby-on-rails-to-the-jvm/
Odeo内で始めた小さなプロジェクトが「Twitter」だ。
Ruby on Railsを使って2週間で最初の動くバージョンを作り上げたという。
http://www.atmarkit.co.jp/news/200711/16/twitter.html
0166nobodyさん
2011/07/31(日) 23:53:14.26ID:jRRlvPfaRailsで複数のデータベースに接続するときはどうすればいいのでしょうか?
ただし、条件として、
1.AのデータベースもBのデータベースもスキーマは一緒。だからクラスも同一のものを使う。
2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。
3.複数のデータベースへは同時に接続します。つまり現在のリクエストで一つのデータベースにしか
接続しないということではなく、一つのリクエスト内で複数のデータベースに接続します。
のが前提です。
やりたいことは、あるデータベースに入っているデータを
他のデータベースに移すような処理と考えてください。
0167nobodyさん
2011/08/01(月) 00:23:29.68ID:???http://ruby-toolbox.com/categories/activerecord_sharding.html
↑に載ってないのだとmulti_dbというのもある。
https://github.com/schoefmax/multi_db
それぞれ癖があるので使えそうなのを使ってくれ。
なお、本番にいきなり適用すると危ないので
テストを十分に行ってから。
0168nobodyさん
2011/08/01(月) 00:40:35.36ID:???やっぱりコアではない他の何かを使うことになるんですね。
しかし、なんで複数のデータベースを同時に使うような
設計になってないのでしょうか?
これ、Railsだけじゃなくて他のフレームワークも同じ気がします。
(たしかCakePHPやPerlのCatalystも同じような設計だった)
モデルの共通情報(実質グローバル変数)としてコネクションがモデルと一体化されており、
たしかにモデルを使う分にはコネクションを指定せずに楽かもしれないですが
そのせいで複数のデータベースを同時に使えない。そのような設計にしか見えないです。
データベース接続とモデルは分離するのが正しい設計だと思うのですが・・・
この設計に問題があると言ってる人はいないんでしょうか?
そういう人の話を聞いてみたいです。
0169nobodyさん
2011/08/01(月) 00:46:56.09ID:???複数定義しておくものなのかなぁ?
> 2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。
があるから、それができないんだよね。
もしかしたら別にやり方ある?
まあもうちょっと調べてみるけど。
0170nobodyさん
2011/08/01(月) 01:42:47.30ID:???0171nobodyさん
2011/08/01(月) 02:09:59.78ID:???RailsのActiveRecordはその名の通りActiveRecordパターンなので、
データベース接続とモデルを一体化させることでシンプルにORMを実現している。
いうなれば世のウェブアプリの95%のケースを簡単にするために5%は切り捨てているわけ。
トレードオフの問題だよ。
正しいかどうかで言えば、「データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。」という設計は正しいの?
0172nobodyさん
2011/08/01(月) 03:54:32.50ID:alQ6X3qmhttps://github.com/rails/rails/commits/master
0173nobodyさん
2011/08/01(月) 08:15:04.01ID:???コネクションを都度切り替えるとか、DB分だけ大元のクラスを継承してそれぞれ別DBを指すようにするとか、泥臭いやり方ならいくつかあると思う。
二層コミットなんて期待できないから大変だと思うが。
まぁ、他のやつらもいってる通り、その設計はそもそも正しいのか。その設計がなんのために必要なのかが気になる。
0174nobodyさん
2011/08/01(月) 08:21:04.77ID:???これが簡単にできればいいんだけどね。
どの有名フレームワークにもデフォルトではこんな機能は付いてないから
役立たずなプラグインに頼るか自前で強引にねじ込むしかないんだよね。
当然、Railsではエレガントに実装することが出来るんでしょ??
0175nobodyさん
2011/08/01(月) 08:24:35.90ID:???0176nobodyさん
2011/08/01(月) 08:32:05.96ID:???ガッツ組みてでは自分のポイントを減算することと相手のポイントを増加させる処理が必要になる。
参照先DBが一つであれば単純にトランザクションを使えばいいが、ユーザーのIDによっては
接続先が二つに分かれる場合もある。
こういう処理をRailsでエレガントに処理できるんですか。
0177nobodyさん
2011/08/01(月) 08:44:08.46ID:???まずこの設計がエレガントではないのでどんなフレームワークを使おうがエレガントになりませんw
0178nobodyさん
2011/08/01(月) 08:51:09.82ID:???0179nobodyさん
2011/08/01(月) 19:55:08.50ID:alQ6X3qmhttp://b.hatena.ne.jp/entry/japan.cnet.com/blog/kenn/2010/01/12/entry_27036420/
はてなブックマーク - ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
http://b.hatena.ne.jp/entry/d.hatena.ne.jp/kazuhooku/20091226/1261838127
ベニヤ板から見たスケールアウトの方向性 - ITレガシー
http://blog.goo.ne.jp/hsato/e/fadb6c13b2274e5194129f85093dfbbb
http://www.atmarkit.co.jp/news/201007/21/pixiv.html
第2回 Hadoopがスケール・アウトする仕組み | Think IT
http://thinkit.co.jp/story/2010/06/11/1608?page=0,2
0180nobodyさん
2011/08/01(月) 21:02:10.90ID:alQ6X3qmhttp://www.atmarkit.co.jp/news/201004/19/twitter.html
RORのままアーキテクチャの変更で10000%高速化したとな。
ttp://b.hatena.ne.jp/entry/highscalability.com/scaling-twitter-making-twitter-10000-percent-faster
ミニブログの Twitterのstats(統計)データ。
http://kaworu.jpn.org/kaworu/2008-01-16-2.php
- 350,000を超えるユーザ。
- 秒間600リクエスト
- 平均毎秒200-300コネクション。最大時は秒間800コネクション
- MySQLは秒間2,400リクエストを処理する
- 180のRailsインスタンスがある。MongrelのWebサーバを使っている。
- 1つのMySQLサーバ(1つの大きな 8コアのサーバ)と1つのスレーブ。スレーブは、統計とレポートのための読み込み専用(リードオンリー)。
- 雑用処理をするための30+のプロセス
- 8台のSun X4100s
- Railsでのリクエストの処理時間は200 msec
- データベースにかかる時間の平均は、50-100 msec
- 16GBの memcached
0181nobodyさん
2011/08/01(月) 21:40:42.30ID:???0182nobodyさん
2011/08/01(月) 21:58:02.42ID:alQ6X3qmシャーディング
http://ruby-toolbox.com/categories/activerecord_sharding.html
https://github.com/masarakki/acts_as_multi_connection
DBを簡易シャーディングするacts_as_multi_connection
http://emasaka.blog65.fc2.com/blog-entry-798.html
0183nobodyさん
2011/08/01(月) 22:03:03.94ID:alQ6X3qmMongoDB 1.6はシャーディングや障害発生時に自動的にデータベースの切り替えや復元を行うレプリカセットの追加により、スケールアウト問題を解決する。
MongoDB 1.6はすでにbit.lyやfoursquareによってプロダクトの中で使われている。bit.lyはピーク時には1000台のサーバを並列化して、およそ5000万人のユーザを支えている。また、Foursquareは数百万のユーザー
0184nobodyさん
2011/08/01(月) 22:05:01.60ID:alQ6X3qmhttp://gihyo.jp/dev/clip/01/orangenews/vol57/0002
https://github.com/twitter/gizzard
0185nobodyさん
2011/08/02(火) 00:33:06.40ID:???> まずこの設計がエレガントではないのでどんなフレームワークを使おうがエレガントになりませんw
データベースが複数ってそんなに変?
アカウントごとにデータベースを分けるって
普通にやると思うんだけど?
0186nobodyさん
2011/08/02(火) 01:14:42.67ID:???藻前のような奴を井の中の蛙と言うんだな(藁
大量アクセス高負荷サイトならユーザ系DBを水平分割するのは当たり前なんだよ。
マジでこのスレはレベル低いな。
マジでワロタ(ゲラゲラ
0187nobodyさん
2011/08/02(火) 08:07:38.57ID:???アカウント毎の場合はクッキーとか見てリクエスト毎に接続先のDB切り替えでいいと思う。
ユーザーデータの水平分割のやり方は知らんが、これもユーザーIDで接続先切り替えだろ。
どちらも問題は一リクエストで複数のDBを扱うときのトランザクションだけど、俺は極力トランザクションが不要な設計にして、問題が起きた時にログから復旧できるようにしたらいいと思う。分散トランザクションのよい解決法を知らんだけだけど。
0188nobodyさん
2011/08/02(火) 08:18:27.46ID:???> 大量アクセス高負荷サイトならユーザ系DBを水平分割するのは当たり前なんだよ。
そもそもruby使わないほうがいいんじゃね
0189143
2011/08/02(火) 09:21:51.95ID:gvG35C3d> params[:id] が取れさえすれば、対応するレコードをDBから引っ張ってきて、
> 同じ情報でnewして保存するだけだよね?
そうだと思うのですが、どうしても空のレコードになってしまいます。
コントローラの記述は下記です。
どこがおかしいのでしょうか?
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable])
respond_to do |format|
if @vegetable.save
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
else
format.html { render :action => "index" }
format.xml { render :xml => @vegetable.errors, :status => :unprocessable_entity }
end
end
end
0190143
2011/08/02(火) 10:04:28.60ID:gvG35C3drespond_to doを下記にしたら品目名が取れましたので、findは成功しているようです。
あとはそのままnewしてくれるだけでいいのですが。
format.html { redirect_to(vegetables_url, :notice => @vegetable.hinmoku ) }
format.xml { head :ok }
0191143
2011/08/02(火) 10:44:58.57ID:gvG35C3d@vegetable_g = Vegetable.find(params[:id])
@vegetable_h = Vegetable.new(params[:@vegetable_g])
respond_to do |format|
if @vegetable_h.save
やはり、@vegetable_h = Vegetable.new(params[:@vegetable_g])にパラメータが入らないのが原因のようです。
いろいろ試しているのですが・・・・。
0192143
2011/08/02(火) 13:03:14.45ID:gvG35C3d下記のようにべた書きしたらコピーできました。
こんな書き方しなければいけないということはないと思うのですが・・・。
@vegetable = Vegetable.new(:kaikyu => @vegetable_g.kaikyu, :comment => @vegetable_g.comment,・・・
0193nobodyさん
2011/08/02(火) 16:30:02.63ID:???> @vegetable = Vegetable.new(params[:vegetable])
何がやりたいの?
0195Perl忍者
2011/08/02(火) 16:34:53.00ID:???笑えますね
0196143
2011/08/02(火) 17:46:04.37ID:gvG35C3d目的はレコードの複製です。
idでfindして得た項目をnewで作りたいです。
>>194
@vegetable_g = Vegetable.find(params[:id])
@vegetable = @vegetable_g.dup
respond_to do |format|
if @vegetable.save
としてみましたが、複製されずにindexに戻りました。。。。
0197nobodyさん
2011/08/02(火) 19:01:04.94ID:???自分が実際に使ったのは以下みたいなコード
@user_org = User.where(:id => params[:id]).first
@user = User.new
@user.attributes = @user_org.attributes
@user.name = "コピー" + @user.name
@user.save
0198nobodyさん
2011/08/02(火) 20:24:15.90ID:BAAVgQKNhttp://d.hatena.ne.jp/teppei-studio/20110709/1310168002
http://readwriteweb.com/cloud/2011/01/how-twitter-uses-nosql.php
0201nobodyさん
2011/08/04(木) 00:22:23.02ID:pv4SsPe4http://www.slideshare.net/dara/pluginrails
http://github.com/flyerhzm/rails_best_practices
http://github.com/pilu/web-app-theme
http://github.com/drnic/install_theme
http://railroad.rubyforge.org/
http://rails-erd.rubyforge.org/
Rails 2.3のApplication Templateで煩わしい初期設定とはおさらばする! - func09
http://www.func09.com/wordpress/archives/426
「RailsWizard」を使って最速で開発を始めましょう - Back yard : yuya_lush’s report
http://d.hatena.ne.jp/yuya_lush/20110707/1310021773
■ このスレッドは過去ログ倉庫に格納されています