【RoR】Ruby on Rails Part15
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2012/07/07(土) 00:50:39.45ID:???http://kohada.2ch.net/test/read.cgi/php/1329492840/
■参考サイト
<英語>
本家: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/
【ヘロク】 Heroku Part1 【PostgreSQL】
http://toro.2ch.net/test/read.cgi/hosting/1329378677/
0952あ
2013/01/18(金) 01:05:47.05ID:g1rcdtnmhttps://groups.google.com/forum/#!topic/rubyonrails-security/61bkgvnSGTQ/discussion
0953nobodyさん
2013/01/18(金) 01:07:52.53ID:g1rcdtnmhttp://www.kb.cert.org/vuls/id/380039
0954nobodyさん
2013/01/19(土) 13:19:47.80ID:???0956nobodyさん
2013/01/20(日) 00:35:37.57ID:???つーことはログイン画面も基本あぶないってこと?
やべーな。
0957あ
2013/01/20(日) 01:13:53.13ID:???やべー
やばい
0958nobodyさん
2013/01/20(日) 11:34:41.21ID:???0960nobodyさん
2013/01/20(日) 18:52:19.35ID:???0961nobodyさん
2013/01/20(日) 20:15:27.82ID:???0962nobodyさん
2013/01/20(日) 22:47:23.62ID:P+bO0zp9http://b.hatena.ne.jp/entry/www.youtube.com/watch?v=h4BUac_yVhU
0963nobodyさん
2013/01/22(火) 08:36:44.58ID:???http://www.ustream.tv/recorded/25419544
Enumerable#entries
http://ruby-doc.org/core-1.9.3/Enumerable.html
0964nobodyさん
2013/01/23(水) 00:12:21.27ID:???たとえばブログサイトを作ったとします
・ユーザー(User)
・記事(Post)
・コメント(Comment)
の3つのモデルがあったとします。
ユーザーの退会時、
:dependant => destroy でユーザーが作成してきた関連レコードも一緒に一斉削除するのが通常かと思います。
しかし、私のサイトではユーザーが他のユーザーの記事を
お気に入りに登録していたりするため、むやみに消せない事情があります。
退会する会員のUserレコードだけを削除した場合、
退会ユーザーのリンク(user_id)が以前投稿したレコードはそのまま残ります。
それらのPostやCommentのレコードは存在し続けても、
作成者が削除されていてuser_idの類にリンクできなくなっているため
nilエラーがどこそこで頻発します。
そこでPostやCommentの作成者名をifか何かで条件から待避させ「退会ユーザー」と統一して表示させ
nilエラーを避けようかと思っています。
みなさんは、こういった処理や
テーブル間の依存関係はどのように設計していますか?
今回の私のようなケースだとどのように削除ルールを作りますか?
会員退会、そのブログの管理は以降は
私が見ますといったかんじです。
0965あ
2013/01/23(水) 02:11:24.92ID:???http://b.hatena.ne.jp/entry/d.hatena.ne.jp/fujisan3776/20080912/1221234453
0967nobodyさん
2013/01/23(水) 08:45:57.77ID:yb79r+q4あとは、退会したユーザーの記事を「退会したユーザー」という特殊な
ユーザー(ログインなどは出来ない)の所有に変更するとか。
0968nobodyさん
2013/01/23(水) 15:05:26.11ID:???退会してもデータが残って表示される事に、ユーザは同意してるのかどうか。
実装は、#try で
0969nobodyさん
2013/01/25(金) 11:18:56.15ID:???a.each do |i|
hidden_field_tag ("key1[]",a[0])
hidden_field_tag ("key2[]",a[1])
end
という方法はあるみたいですがスマートじゃないですよね、、、
しかも
a = [["b","1"],["c",2]]
みたいな2次元配列になると更に複雑ですし。
0971nobodyさん
2013/01/25(金) 12:21:03.24ID:Ecor/dDThttp://www.security-next.com/036753
0972nobodyさん
2013/01/25(金) 17:50:56.51ID:???http://yorunocafe.blogspot.jp/2011/09/i18ngenerators.html
の記事と同じ症状が起きています。
(rails-i18nを使用しようとするとja.ymlの取得がうまくいかない)
記事にあったように、 ja.yml を公式から落としてきて
該当railsプロジェクトのconfig/locales/ja.yml に設置してから
rails g i18n_locale ja を叩いても
fetching ja.yml from rails-i18n repository...
could not find ja.yml on rails-i18n repository
となってしまいます。どなたか解決方法を分かる方はいらっしゃいますか?
0973nobodyさん
2013/01/25(金) 20:00:53.13ID:???解決いたしました
しかしながら、rails g i18n jaで生成された
translated_jaに各種テーブルのカラムを入れても反映されません。
なぜでしょうか?
0974nobodyさん
2013/01/27(日) 01:39:33.37ID:???0975nobodyさん
2013/01/27(日) 22:46:51.72ID:???しかし、ページネーションを使っている状況でキャッシュを使用すると
2ページ目以降も全て同じ内容でキャッシュされてしまいます。
(コントローラーの1アクションにつき1つのキャッシュをしている?)
こういった場合はどのように対処すればいいでしょうか?
ちなみにページネーションの
page=6 とかだけではなく
query=apple や
country=57 などの複数のパラメータも使用しています。
URLで hoge.com/posts?page=7&query=apple&ciuntry=57
のようになります。
0976nobodyさん
2013/01/28(月) 01:41:22.94ID:???1ページあたりの表示のためにSQLリクエストが多い場合だと
SSD 2GBメモリ>>>>>>>>>>HDD 4GBメモリ?
0977nobodyさん
2013/01/28(月) 04:17:26.26ID:???cache suffix: params
でもこれだと posts?neko=nya とかが渡されると新たにキャッシュが作成されてしまうから
cache suffix: params.select{ |key| %w(controller action page query country).include?(key) }
とかする必要があるみたいだ。
0978nobodyさん
2013/01/28(月) 08:54:51.35ID:???ありがとうございます。
その記述だとcountryのパラムに何か値が入っていると
それにキーをつけてキャッシュしていってくれるのかな?
しかし、1ページ目と2ページ目以降の全てが同じ内容で表示されちゃいますよね?
country=47と且つpage=7
とかとの組み合わせで何とかキャッシュできないかな?
0979nobodyさん
2013/01/28(月) 10:02:05.35ID:???キャッシュのキーがログに表示されるから確認してみて。
0980nobodyさん
2013/01/28(月) 10:22:55.99ID:???ありがとうございます!
たとえばパラメータが
params[:page] => ページネーション用のため必要に応じて発生
params[:mode]
params[:country]
params[:query]
と複数あるのですが、
(params[:query].nil? || params[:query] = "") && params[:country].nil?
の時のみキャッシュしていくっていう条件付きで設定出来ますか?
そうしないと 検索される度(query!="")にキャッシュされてしまい
キャッシュが無限大に増殖してしまいますよね。
0981nobodyさん
2013/01/28(月) 10:49:58.62ID:???- if params[:query].blank? && params[:country].blank?
- cache suffix: params[:page] do
ページ別にキャッシュされる
- else
キャッシュされない
0982nobodyさん
2013/01/28(月) 11:38:30.53ID:???さっそく、ありがとうございます
コントローラー内
if params[:query].blank? && params[:country].blank?
cache suffix: params[:page] do
キャッシュする
else
キャッシュしない
end
↓はどこへ?上の構文より上に記述しとけばokですか?
cache suffix: params.select{ |key| %w(post index page mode).include?(key) }
色々と検索しましたが
やり方が皆さん違うようですね
Rails.cache.fetch(:controller => 'posts', :action => 'index', action_suffix => @key)
が、@keyに結果が既に格納されていたら取り出す。なければ、作って格納する。
だと思っていたのですが
これと絡めるのでしょうか?
0983nobodyさん
2013/01/28(月) 12:40:36.07ID:???<% if params[:query].blank? && params[:country].blank? %>
<% cache suffix: params[:page] do %>
<% @posts.each do |post| %>
<%= post.created_at %>
<% end %>
<% end %>
<% else %>
<% @posts.each do |post| %>
<%= post.created_at%>
<% end %>
<% end %>
コントローラーではキャッシュされているか確認して
キャッシュされていないときのみSQLを発行とかする。
if params[:query].blank? && params[:country].blank?
unless fragment_exist?(suffix: params[:page])
@posts = Post.page(params[:page])
else
# キャッシュされてるから @posts いらない
end
else
@posts = Post.where(:query => params[:query])...
end
0984nobodyさん
2013/01/28(月) 12:41:35.63ID:???<% if params[:query].blank? && params[:country].blank? %>
<% cache suffix: params[:page] do %>
<% @posts.each do |post| %>
<%= post.created_at %>
<% end %>
<% end %>
<% else %>
<% @posts.each do |post| %>
<%= post.created_at%>
<% end %>
<% end %>
コントローラーではキャッシュされているか確認して
キャッシュされていないときのみSQLを発行とかする。
if params[:query].blank? && params[:country].blank?
unless fragment_exist?(suffix: params[:page])
@posts = Post.page(params[:page])
else
# キャッシュされてるから @posts いらない
end
else
@posts = Post.where(:query => params[:query])...
end
0985nobodyさん
2013/01/28(月) 12:44:48.11ID:???cache suffix: params.select{ |key| %w(post index page mode).include?(key) }
はキャッシュのキーにキーがpost index page modeのparamsを用いるって意味で
params[:query].blank? && params[:country].blank? のときのみキャッシュするなら不要だろうと思って
cache suffix: params[:page] に書き換えた。必要なら書き換えて。
フラグメントキャッシュじゃなくてアクションキャッシュの方が良いと思う。
その場合はコントローラーに下の行を書くだけ。
caches_action :cache_suru_action, :cache_path => proc{ params[:page] }, :if => proc{ %w(query country).all?{ |key| params[key].blank? } }
なんか間違ってたらごめんやで
0986nobodyさん
2013/01/28(月) 13:19:19.38ID:???ご丁寧にありがとうございます
すみません。
勘違いしていました。
ビューではなく、
SQLコマンドで取得した結果内容だけをキャッシュに格納しておく。
次回、同じ内容のリクエストがあり、もしそのキャッシュが存在したら、
いちいちSQLコマンドが実行されず結果だけ取り出される。それをそのままビューに渡す。それが故に処理が早くできる。
つまり、コントローラー内である程度は簡潔できるものだと思いこんでいました
必ずビューへの記載も必要になってくるんですね
結構めんどうな作業になりそうですね。
本当にご丁寧にありがとうございました。
家に帰ったら試してまた報告いたします。
0987nobodyさん
2013/01/28(月) 16:00:23.37ID:???ここで作られた paginationやmodeパラメータつきのキャッシュをアクション内で消すには
どのように記述するべきですか?
一般的にはRails.cache.delete(:key)
ですが
教えていただいた方法で出来たキャッシュがどこに出来ているのか分かりません。
postsに更新がかかったり、レコードが新たに作られたときに、キャッシュを全て削除したいのですが、
それら(posts#index)で出来たキャッシュを一気に消すにはアクション内でどのように記述するべきですか?
0988あ
2013/01/29(火) 06:42:48.31ID:???http://aws.typepad.com/aws_japan/2013/01/ec2-for-in-memory-computing-the-high-memory-cluster-eight-extra-large-instance.html
Amazonクラウド、2テラバイトのSSD、60GBメモリ搭載で12万IOPSを実現するインスタンスを発表
http://aws.typepad.com/aws_japan/2012/07/aws発表-new-high-io-ec2-instance-type-hi14xlarge-2-tb-of-ssd-backed-storage.html
0989nobodyさん
2013/01/29(火) 15:50:25.21ID:9UmlSZdWhttp://weblog.rubyonrails.org/2013/1/28/Rails-3-0-20-and-2-3-16-have-been-released/
Ruby on Railsに新たな脆弱性、アップデートやパッチの適用を - ITmedia エンタープライズ
http://www.itmedia.co.jp/enterprise/articles/1301/29/news099.html
0990nobodyさん
2013/01/29(火) 16:46:05.98ID:???config/application.rb の config.cache_store による。
フラグメントキャッシュは expire_fragment で削除できる。
http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html
正規表現を受け付けるようだからキーにマッチするのをを渡せばいい。
キーは自分で指定するので分かってるはずだけどログにも出力されるはず。
0991nobodyさん
2013/01/29(火) 17:12:00.58ID:9UmlSZdWhttp://blog.plataformatec.com.br/2013/01/security-announcement-devise-v2-2-3-v2-1-3-v2-0-5-and-v1-5-3-released/
0992nobodyさん
2013/01/30(水) 08:01:12.07ID:???productionモードに移行した途端に表示されなくなりました
同様に色んなところでproductionモードでの挙動がおかしいです。
developmentモードで真剣にバグ潰ししてたのは何だったの?といったレベルです
もうこの際、developmentモードを本番として公開しようと思うのですが
エラー内容を表示させない方法はありますか?
それとproductionモードと比べたときに、遅いとか、何かデメリットはありますか?
0993nobodyさん
2013/01/30(水) 08:14:42.30ID:???config.serve_static_assets = true にしても駄目?
0994nobodyさん
2013/01/30(水) 10:10:02.52ID:???rescue_from Exception :with => :render_404
def render_404
render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false, :content_type => 'text/html
end
とでも書けば良いと思われ
ただ速度低下が半端ないので、productionで動くように頑張ったほうがいいと思う 作りにもよるけど、100倍くらい違うと思う
3.2以降は、devでも変更があった場合しかファイル読み込みしない&ルーティング解釈しないようになったらしいから
速度低下は以前ほどでは無くなっているのかな??
productionになると動かんくなるのが多いのは 993さんも指摘してるけど asset pipeline周りが原因のことが多いと思う
0995nobodyさん
2013/01/30(水) 10:55:41.63ID:???0996nobodyさん
2013/01/30(水) 11:49:30.40ID:???上の人が書いてるように設定変えるだけでOK
0997nobodyさん
2013/01/30(水) 14:33:00.58ID:???>>994、>>995、>>996 わざわざ、ありがとうございます。本番への移行でやったことといえば
1. $ bundle exec rake db:create RAILS_ENV=production
2. $ bundle exec rake db:migrate RAILS_ENV=production
3. $ bundle exec rake assets:precompile RAILS_ENV=production
これでアクセスするとsomething went wrongといったエラーが出てきてきました。
心当たりとしては、assets/javascripts以下と assets/css以下に 自分でカスタマイズしたjsファイルやjs.coffeeファイル、css.erbファイルをモデル関係なく単体で作っていたり、
外部のプラグインをそのままフォルダーへ入れていたので
4. config/environments/production.rbに下記の行を追加(これで追加した分も含め該当拡張子の全ファイルをプリコンパイル)
config.assets.precompile += %w( *.png *.jpg *.ico *.gif *.css *.erb *.scss *.js *.coffee)
5. $ bundle exec rake assets:precompile RAILS_ENV=production
6. $ bundle exec rake sunspot:solr:start RAILS_ENV=production
これでアプリは動くようにはなったのですが、なぜかdevelopmentでは生成されていたはずの
simple-captchaというgemのcaptcha画像が表示されなくなりました。
0998nobodyさん
2013/01/30(水) 15:03:59.19ID:???0999nobodyさん
2013/01/30(水) 15:09:26.24ID:???production.rbの
config.action_dispatch.x_sendfile_header = "X-Sendfile"
が邪魔をしていたようです。 コメントアウトすると直りました
スレ汚しすみませんでした
1000nobodyさん
2013/01/30(水) 15:21:00.69ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。