【RoR】Ruby on Rails Part16

このエントリーをはてなブックマークに追加
952nobodyさん:2013/10/18(金) 13:20:50.08 ID:???
>>949
俺もこれ知りたい
953nobodyさん:2013/10/18(金) 17:18:12.27 ID:???
>>949
よく気づいたね
それがCMSでのSEO攻略のミソの部分だよ
検索エンジンとしては特定URLのページ内容がしょっちゅう書き換わるようなURLは検索結果として信頼性(精度)が著しく落ちてしまう

いかにURLと記事内容を固定化させるかはCMSにおいての必勝法みたいなもん

欲を言えばhtmlで出力させるなどして静的化させたほうがよい
954nobodyさん:2013/10/18(金) 17:58:31.36 ID:???
2chみたいなコメントが増える型でURL固定って無理じゃね
955nobodyさん:2013/10/18(金) 18:06:27.49 ID:???
>>953
神様ありがとう
956nobodyさん:2013/10/18(金) 18:15:46.67 ID:???
Rails 4からhas_one等に:selectのオプションを指定してカラムを絞ることが出来なくなったみたいですが、代わりの方法はあるのでしょうか?
957nobodyさん:2013/10/18(金) 18:25:22.77 ID:???
>>956
ラムダ式で普通にできるっしょ
確か別のクエリ叩いたりRubyの式を書くこともできたはず
958質問常連者 感謝感謝:2013/10/18(金) 21:07:04.33 ID:NnVzWy/v
http://kohada.2ch.net/test/read.cgi/php/1382097427/

いつもお世話になっているので、次スレ立てさせていただきました。
写真の管理にpaperclipではなくて、Cloudinaryとアマゾンを使うのが世の流れなのでしょうか?
(ちなみに私は、さくらVPS800GBを使ってスタートしようと思うのですが、写真1枚100KB、800万枚入る計算ですが)
959nobodyさん:2013/10/18(金) 21:15:22.65 ID:???
carrirerwaveのほうが今は主流かな
960nobodyさん:2013/10/19(土) 05:11:57.92 ID:???
>>954
無理じゃない
古いほうから順にページ番号をナンバリングしていけば完全に固定化される
961nobodyさん:2013/10/19(土) 06:36:06.82 ID:???
誰かバリデーションのことで教えて!


Aというテーブルにa, b, c, dという4つのカラム(ポリモーフィック)があります。

このa, b, c, dが完全一致するレコードが重複してはいけない場合は

eというカラムを追加して保存時に
e=a+b+c+d
A.e=e
A.save
として

Aのモデル定義にて
eカラムをuniqunessのバリデーション設定してあげる必要がある?

それとも、いちいちeカラムとかを追加しないでスマートにバリデーションチェックをかける方法はありますか?
962nobodyさん:2013/10/19(土) 09:44:45.39 ID:???
>>961
validates uniqueness scope でぐぐれ
963nobodyさん:2013/10/19(土) 13:04:54.18 ID:hyytPm3D
railsでcancan的なシステムを自分で構築するには、どのサイトで勉強するのが良いでしょうか?
認証はdeviseではなく自前でやっているので、拡張性を考えて全部自前でやりたいなと思っているのです。
964nobodyさん:2013/10/19(土) 13:08:47.74 ID:???
deviseはコントローラーやメソッドをドキュメント見てオーバーライドしたりすれば制約はほとんどないよ
trackableなんかも自作メソッドで別テーブルに保存したりできるし
965nobodyさん:2013/10/19(土) 13:17:33.46 ID:hyytPm3D
>>964
追々deviseにするかもしれません。
ただ、今は構築中の初心者なので、仕組みを理解しながらやっていきたいなと思っているのです。
cancan的なことを自前でやっている人はあまりいないですかね?
一般ユーザーは登録編集までできて、管理ユーザーは削除までできるとか
966nobodyさん:2013/10/19(土) 13:29:03.29 ID:uAnzwLAs
authorization とか authz とかのキーワードで探した実装を参考にするとよいのでは?
967nobodyさん:2013/10/19(土) 15:00:01.36 ID:???
RailsによるアジャイルWebアプリケーション開発って本が参考になると思う
968nobodyさん:2013/10/19(土) 15:01:41.88 ID:???
どうせRuby・Railsのバージョンが古くて
互換性がないというオチだろう?
969nobodyさん:2013/10/19(土) 15:56:03.97 ID:Jr/4anBv
tests
GET /tests(.:format) tests#index
POST /tests(.:format) tests#create
new_test
GET /tests/new(.:format) tests#new
dit_test
GET /tests/:id/edit(.:format) tests#edit
test
GET /tests/:id(.:format) tests#show
PUT /tests/:id(.:format) tests#update
DELETE /tests/:id(.:format) tests#destroy

こういうルーティングがされているとき

@test = Test.new(params[:test])
format.html { redirect_to @test }


redirect_to @testはどうして「GET /tests/:id(.:format) tests#show」になるのでしょうか?

redirect_to @test.id ならわかりますが・・・
970nobodyさん:2013/10/19(土) 17:08:23.46 ID:uAnzwLAs
>>969

redirect_to と url_for のリファレンス嫁
971nobodyさん:2013/10/19(土) 18:56:06.66 ID:Jr/4anBv
>>970
読んだけど書いてません
972nobodyさん:2013/10/19(土) 19:25:17.68 ID:???
redirect_to(options = {}, response_status = {})

Record - The URL will be generated by calling url_for with the options, which will reference a named URL for that record.


url_for(options = nil) Link

Relying on named routes

Passing a record (like an Active Record) instead of a hash as the options parameter will trigger the named route for that record. The lookup will happen on the name of the class. So passing a Workshop object will attempt to use the workshop_path route.

バッチリ書いてるね
973:2013/10/19(土) 20:04:10.64 ID:???
代わりに、オプションパラメータとしてハッシュを記録(Active Recordのような)を渡すと、
そのレコードの名前付きルートの引き金となるでしょう。
ルックアップは、クラスの名前に起こります。
だから、ワークショップのオブジェクトを渡すとworkshop_pathルートを使用しようとします。
974nobodyさん:2013/10/19(土) 20:39:09.87 ID:Jr/4anBv
>>972-973
http://api.rubyonrails.org/だったんですね
すいませんraisdocをあぼーんしたらそこも見えなくなって、見たけどありませんでしたと嘘つきました

ありがとうございました
975nobodyさん:2013/10/20(日) 06:04:59.30 ID:???
現在、apacheで運用してて毎日6万PV回してるけどもう限界かもしれん

サーバーが日に2度3度落ちる

1GBさくらVPSだとこんなものかのぉ
976nobodyさん:2013/10/20(日) 06:27:52.20 ID:???
それくらいならnginxにかえれば全然持つよ
977nobodyさん:2013/10/20(日) 06:35:16.08 ID:???
nginxってそんなに優秀なの?
978nobodyさん:2013/10/20(日) 07:01:54.08 ID:???
apacheはメモリ食い過ぎるから今の主流はnginx-unicornだよ
優秀ってほどじゃないけどそれくらいのPVならまだ戦えると思う
979nobodyさん:2013/10/20(日) 07:55:24.16 ID:???
passenger は裕福なサーバ向けだからね
980nobodyさん:2013/10/20(日) 08:32:29.67 ID:???
ちなみに、さくらの2GB SSDプランで nginx+unicorn なら
どのくらいまでの アクセス数/日 であれば戦えそう?

50万PVくらいかな?
981nobodyさん:2013/10/20(日) 12:40:51.60 ID:???
ウェブサーバーごときで
そんなに差は出ない。

結局はアプリ次第。
982nobodyさん:2013/10/20(日) 13:18:52.25 ID:fxS1kk8p
http://railscasts.com/episodes/250-authentication-from-scratch-revised?view=asciicast
http://cumiki.com/hacks/16

ここらへんを参考に認証機能をあえて自前で構築しているのですが、下記のようなエラーが出てしまいました。この対策(短期的長期的)を教えていただけたら幸いです。
私がやっていたのは、サインアップ、ログインアウトを実装し、その後にユーザーデータを全部destroyしました(なぜという訳ではないのですが)。
するとsession[:user_id]には"11"という数字が残ったまま、そのユーザーが見つからんということでエラーが出ているようです。
下記はアプリケーションコントローラーのコードで、レイアウトテンプレートに入れて共通表示しているものです。

私が知りたいのは、@session[:user_id]をターミナルとかから消せないか、A長期的に、ログアウトやユーザー削除がsession[:user_id]を掃除するにはどうすればよいのか。

とりあえず、共通表示のコードを取り払えば、このエラー表示からは逃げれそうですが、仕組みを解するためにも上記二点を知りたいと思っています。
宜しくお願い致します。

ActiveRecord::RecordNotFound in UsersController#new


Couldn't find User with id=11


Extracted source (around line #8):

private

def current_user

line8 @current_user ||= User.find(session[:user_id]) if session[:user_id]

end

helper_method :current_user
983nobodyさん:2013/10/20(日) 13:59:02.69 ID:???
エラー内容とやりたいことがまったく噛み合っていないので答えようがない
984nobodyさん:2013/10/20(日) 13:59:25.30 ID:fxS1kk8p
http://higelog.brassworks.jp/?p=343

よくpassengerの話が出ていますが、このサイトはナルホドと思いました。。。
985nobodyさん:2013/10/20(日) 14:05:23.79 ID:fxS1kk8p
>>983
すみません。
素人過ぎて、噛みあっていないというところから理解できていませんでした。
session[:user_id]に残っていると思われる"11"というのを、削除したいのですが、短期的解決方法(@)、長期的解決方法(A)を探っている段階でございます。
もうすこし勉強してきます。
986nobodyさん:2013/10/20(日) 14:19:23.61 ID:Hy7aQ34j
クッキー消せ
987nobodyさん:2013/10/20(日) 15:25:29.58 ID:fxS1kk8p
>>986
ありがとうございます!
エラー表示されなくなりました!

こちら(クライアントサイド)のクッキーの問題なんですね^^;
988nobodyさん:2013/10/20(日) 15:33:13.39 ID:???
>>981
静的ファイルの読み込み速度は全然違うよ
989nobodyさん:2013/10/20(日) 16:33:37.68 ID:Hy7aQ34j
>>987

Railsのデフォルトではクッキーにセッション情報が入っている。
(改竄対策はされている。Rails4からは暗号化もされている)

サーバ側でセッション内のユーザーIDからユーザーオブジェクトを作ろうとして見つけられなかった
のがエラーの原因なので、対応としては、

クライアント
* もうサーバ側に存在しないユーザーIDをセッションを介して送るのをやめる。
= セッションクッキーを消す。

で当座は凌げるが、抜本的には

サーバで
* 存在しないユーザーIDと分かった(current_userメソッドで RecordNotFound が発生した)とき、
** ユーザーIDをセッションから消す
** セッションをまるごとリセットする
などの対応をする。
990nobodyさん:2013/10/20(日) 17:01:06.75 ID:fxS1kk8p
>>989
完璧な御回答ありがとうございます。
current_userメソッドを改造すればいいわけですね・・・
ifとかで場合わけするのでしょうか・・・

ちょっと調べてみます。
ありがとうございました。
991:2013/10/20(日) 17:19:40.84 ID:???
992nobodyさん:2013/10/20(日) 17:51:15.94 ID:???
yum install nginxだとバージョンが1.0.15になるんだけど
新しいバージョンの1.5.4とだとパフォーマンスは大きく変わるかな?

ちなみにRails3.2.11

あまり変わらないならyumのほうを入れようと思う
993nobodyさん:2013/10/20(日) 18:10:41.43 ID:???
自分でサーバ立てるのってなんか楽しそうだしスゴそうだよね?
サーバ立てるのなんてちょっとパソコンに詳しければ簡単にできるんでしょ?
ハードウェアの多重化なんて必要?
企業で使うとかじゃなく個人的に細々と立てたサーバが攻撃されることなんて滅多にないよね?
ADSL でつないでれば大丈夫だよね?
攻撃が来るって言ったって大した数じゃないんでしょ?
攻撃されたって大したことは起きないんでしょ?
http://b.hatena.ne.jp/entry/tmaeda.s45.xrea.com/20041101.html
994nobodyさん:2013/10/20(日) 18:13:37.91 ID:???
Railsがクラッキングされている? - QA@IT
http://qa.atmarkit.co.jp/q/3190
995nobodyさん:2013/10/20(日) 18:15:07.14 ID:???
ITmedia エンタープライズ:自社サーバがフィッシングサイトに「踏み台化」されたら? (1/3)
また、電源を切ってしまうことも良い対応ではない。
オンメモリ上で稼働しているフィッシングサイトの場合は、電源を切ることによって、すべてのデータが消えてしまい、原因究明や対応に遅れなどが出ることも考えられるからだ。
 事実、フィッシングサイトを構成するツールの中には、後に証拠が残らないよう、すべてがオンメモリ上で動作するものがある。
このような場合、再起動や電源オフによって、メモリ上にあるすべてのプログラムやファイルが消え、事実や原因の確認が困難になる。
http://www.itmedia.co.jp/enterprise/articles/0603/17/news004.html

New York Timesの記事によれば、同紙は米Symantecのウイルス対策製品を使っていたが、
Mandiantが調べた結果、攻撃者が使った45種類のカスタム版マルウェアのうち、Symantecの製品で検出できたのは1種類のみだったという。
http://bylines.news.yahoo.co.jp/yamamotoichiro/20130204-00023332/
996nobodyさん:2013/10/20(日) 19:07:43.41 ID:???
ソニー7700万件情報流出、原因は「脆弱性への未対処」 : サイバー護身術 : セキュリティー : ネット&デジタル : YOMIURI ONLINE(読売新聞)
http://www.yomiuri.co.jp/net/security/goshinjyutsu/20110502-OYT8T00649.htm

ソニーPSNの個人情報漏洩に英国で約3500万円の罰金支払い命令、「防げた事件」と判定 - Engadget Japanese
http://japanese.engadget.com/2013/01/24/psn-3500/
997nobodyさん:2013/10/20(日) 20:40:14.09 ID:fxS1kk8p
>>990
やべ、分かりません(笑)
ちょっとどなた様か、コードのヒントをくださいませ><
998nobodyさん:2013/10/20(日) 22:59:07.82 ID:Hy7aQ34j
>>997

find(ID) は見つからなかったとき例外 ActiveRecord::RecordNotFound を投げるので、

方法1: rescue ActiveRecord::RecordNotFound で見つけられなかった場合の処理を書く(@current_user = nilとするなど)
方法2: find_by_id(ID) か where(id: ID).first にする (例外にならず、 nil を返す)

の2とおりの方法が考えられる。
999nobodyさん:2013/10/20(日) 23:30:25.22 ID:aepowEVY
Rails4技術者認定シルバー試験

こんなのが秋から始まるのですね!?
ってことは、rails4対応の参考書とかも充実してくるのでしょうか・・・

今は海外の英語本を読まなければならずしんどいです。
TOEICはそこそこですが、そもそも未知の領域の学習なのでできれば母国語が良い。

ここにいる皆様ならもう必要ないかもしれませんが・・・
1000nobodyさん:2013/10/20(日) 23:38:52.93 ID:???
【RoR】Ruby on Rails Part17
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。