トップページ⇒php
1001コメント415KB

【RoR】Ruby on Rails Part16

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2013/01/31(木) 08:07:31.27ID:GGHiBszv
前
http://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
0652nobodyさん2013/08/29(木) NY:AN:NY.ANID:ZEP+9UcV
High Performance Rails (long edition) // Speaker Deck
speakerdeck.com/mirakui/high-performance-rails-long-edition
0653nobodyさん2013/08/29(木) NY:AN:NY.ANID:ZEP+9UcV
Rails Hub情報局: 素人がWebサービスを作ってみて分かった9つのこと
el.jibun.atmarkit.co.jp/rails/2011/09/web9-1e8b.html

スタートアップ企業で8年間Webの開発をしてみての反省点いろいろ - Masatomo Nakano Blog
独自フレームワークはやめよう
6. サーバ周りの人材をしっかり確保しよう
b.hatena.ne.jp/entry/blog.madoro.org/mn/84

Ruby on Rails が簡単というのはウソ - #生存戦略 、それは - subtech
subtech.g.hatena.ne.jp/secondlife/20120309/1331279496
0654nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
@users = User.joins(:profile).order('profiles.prefecture DESC')

みたいなことをしてUser群を抽出しても

レンダーするときに再び
User1レコードごとにsqlクエリを吐き出してるっぽいです。

これはどうしてですか?
お陰で体感ロード時間が遅いです。

ロード時間をマシにするなら
joinsの代わりにincludesとかを使うんでしょうか?
0655nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
そうだよ。includesを使う。N+1問題という。
joinsは上の例で言うとprofileのカラムから検索"だけ"したい時に使う。
includesでも検索出来るけど、rails4からはreferencesを指定しないと警告される。
0656nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
>>655
ありがとうございます

例えば世界中のサッカーリーグで考えると

Country (それぞれの国)
Team (プロリーグのチーム)
User (プロサッカープレイヤー)
Profile (プレイヤーの詳細プロフィール)
Mvp (国を代表するトップ選手)
の5つのモデルがあるとします

Countryは複数のTeamを持っています。
同様に国ごとで
複数のMVP(プレイヤー)を持っているとします。

Teamには複数のUserが所属していて、
Userはそれぞら1つのProfileをもっていたとしたとき

国単位で見たときにこれら全てをincludesするなら

@coubtry = Country.find(params[:id]).includes(teams: [users: [:profiles]], mvps: [users: [:profiles]] )

のようにすればいいのでしょうか?
0657nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
has_one だから profile になると思います。
includes(:teams => {:users => :profile}, :mvps => {:users => :profile})
0658nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
あとincludesはそこに書くとエラーになるから
Country.includes(hogehoge).find(1) となりますね。
0659nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
>>657
>>658
ありがとうございました

非常に参考になります
試してみたところ
なぜか変更以前よりロード時間が長くなりました

sqlの数は明らかに減ってるんですが。。。。

こういうこともあるんですね。
0660nobodyさん2013/08/29(木) NY:AN:NY.ANID:???
>>651
それだと問題なくindexも使えますね。
ベンチマークでは、最初に作者を検索するのことを除外すれば
カラムを追加したのと同程度の結果になりました。

ただ、元になる作者が複数、たとえば
Author.where(sex: "man") これらの本が欲しいとなると・・・
0661nobodyさん2013/08/30(金) NY:AN:NY.ANID:???
includes使いながら、JOIN先のカラムで検索する方法ってなかったっけ
あんま知られてないけどあった気がするが…思い出せん
0662nobodyさん2013/08/30(金) NY:AN:NY.ANID:???
>>644
Rails3.2でも動作確認しました
ありがとうございました
0663nobodyさん2013/08/31(土) NY:AN:NY.ANID:pHhaBgx0
winscpを選びました。
先輩諸氏に感謝しております。
今後もお世話になるかと思いますが宜しくお願い致します。
0664nobodyさん2013/09/01(日) 21:16:06.01ID:???
ECサイトを構築しているのですが、注文内容の入力→確認→完了というプロセスを経る際に
完了でsaveメソッドを呼び出す前に確認の時点でバリデーションを行い、エラーメッセージを出力したいのですがどうしたらいいでしょうか
new→valid?メソッドでバリデーションの成否自体を行うことはできるのですが、エラーメッセージの出力がわかりません
0665nobodyさん2013/09/01(日) 21:25:12.30ID:???
すいません自己解決しました
下のリンクを読めば簡単でしたね
ttp://yoshitetsu.rackbox.net/active_record_validations.html
0666nobodyさん2013/09/02(月) 07:55:13.98ID:???
Rails4ってどう?
0667nobodyさん2013/09/02(月) 10:56:10.90ID:???
turbolinks外すと3とそんなに変わんない気がする
キャッシュ関係がよく分からない
0668nobodyさん2013/09/03(火) 03:13:00.11ID:???
strong parameterは重要だと思う
記法やモデルのメソッドが追加されたり小さな変更はそこそこあるけど、確かに大きな変更点はあまりない印象だね
というよりRails自体が成熟してきてるのが原因だと思うが
0669nobodyさん2013/09/03(火) 07:33:17.72ID:???
Railsとcakephpだと
cakephpのほうが体感的に早くない?
0670nobodyさん2013/09/03(火) 08:33:07.31ID:???
ActiveSupport::Queueってどうなったんでしょうか。
masterブランチにもないし、今後も取り込まれそうにない?
0671nobodyさん2013/09/03(火) 08:56:33.25ID:???
ベンチマークでは、RailsとCakeはそんなに変わらなかった気がする
ちなみにCakeはPHPフレームワークの中では最遅の部類
0672nobodyさん2013/09/03(火) 10:52:00.37ID:GPnijyFs
>>669

>>96
0673nobodyさん2013/09/03(火) 21:39:32.25ID:LahgdGM9
他人が作ったRailsアプリを保守する側に回っていて、約束事が多すぎて正直よく分からないのですが・・・
Rails3.2では、assets/javascripts以下に配置された.jsは基本的に全て読みこまれるんですよね?


とりあえず、Rails側からデータをassets/javscripts/***.jsに渡したいのですが、
その場合、HogeControllerが、hoge.html.erbに書いた<%= @hoge.json %>にまずJSON形式でグローバルスコープで書きだしてから、
assets/javscripts/***.jsからその書きだしたJSONを参照するしかないのでしょうか?


この方式を採用したら、ユーザーが現在見ているHTMLのソースに
{"name": "Hoge", "age": Hage } とかデータがそのままべた書きされてしまうのでできれば避けたいのですが・・・


他に何かいい方法はありますか?
0674nobodyさん2013/09/03(火) 22:13:36.80ID:08+4VxZe
>>670

今後どうなるかは分からんけど、 rails-queue という gem に切り出されているのを
3.2 で使っている。

>>673

JSONを吐くリソースURLを用意して、JSからそこにリクエストすればいいのでは?
0675nobodyさん2013/09/03(火) 23:23:49.53ID:???
>>674
それもいいかもしれませんが、
実はHogeControler#indexの中で既にそのレコードは呼び出していて、そこからhoge.erb.htmlだったり、.jsだったりが描画されるんです。

それだったら、.jsからまた改めてそのレコードを呼びだすAPIを叩いてレコードをまた読み込むよりは、
HogeControler#indexが終わって、Viewをレンダリングするときに、そのレコードをViewに渡したほうがよくないでしょうか・・・・


もちろんそう重いクエリではないので、二度クエリを実行してもそこまでパフォーマンスは低下しませんが・・・
0676nobodyさん2013/09/04(水) 00:06:31.28ID:???
>>675

Viewに渡して処理していいなら、それでいいと思うよ。
最初に>>675がjsに渡したいって書いたから>>674のような答えになるわけで。
0677nobodyさん2013/09/04(水) 00:35:27.95ID:???
>>676
説明不足ですいませんでした
でも直接見ているHTMLにJSON形式でべた書きしたくないんですね。。。
せめて外部.jsに吐くならともかく。
0678nobodyさん2013/09/04(水) 07:35:09.98ID:???
>>677
外部jsに吐くなら、それはすなわち2度リクエストが行われることになるわけで…

どうしてもというなら、HTMLを返すリクエストの中でDBから取得したレコードをキャッシュしておいて、
JavaScript/JSONのリクエストの際にそれを使うとかしかないが、そこまでするならHTMLに直接
書く方を選ぶな。
0679nobodyさん2013/09/04(水) 12:59:09.84ID:???
ローカル開発環境でSSLと非SSLを混ぜて開発したいと思い
ttp://www.ummm.info/blog/59

こちらの記事を参考にproxy_passで対応したのですが、ssl_requirementでリダイレクトをすると
内部で動いているlocalhost:3000の方に移動してしまい、上手い具合に混在させることができません

他に良い方法がないか、もしくは現在の方法下においての解決法があれば教えて下さい
0680nobodyさん2013/09/04(水) 15:28:03.58ID:???
>>673

***.js.erb にして HogeController から js で render するのは?
やりたいことがいま一つわかってないけど。
0681nobodyさん2013/09/04(水) 18:30:59.82ID:???
>>678の言うようにHTMLにべた書が一番良いと思う。
特に関係ない人に見られて困るデータだと、publicに書き出すわけにもいかず、
新たにアクションはやして判定処理もしなきゃいけなくなる。
0682nobodyさん2013/09/04(水) 20:48:35.62ID:???
>>678
>>681
分かりました。ありがとうございます。
嫌だったのは、ソースの中にこんなのが書かれてしまうんですよねえ・・・。

<script type="text/javascript">
   {"name":"Hageo Hoge","age":"17","address":"Tokyo"}
</script>

まあリクエストした本人が過去に投稿した情報ですから本人に見えてしまうのは仕方ないんですが。

>>680
すいませんが、Controllerからjsでrenderってどうやるのでしょう?

やりたいことは、要はControllerから、TEXT(JSON)にしてから渡すのではなく、JSのオブジェクトをそのまま渡したいってことです。

<script type="text/javascript">
var object = <%= @hoge.to_json.html_safe %>
</script>

これは結局↓みたいに変換されてしまい、ソースを見たらデータが見えてしまってあまり好きじゃないのです・・・。

<script type="text/javascript">
var object = {"name":"Hageo Hoge","age":"17","address":"Tokyo"}
</script>


関係ないですけど、Viewから<%= render(:partial => "main/hoge") %>で_hoge.js.erbを描画しようとしたら、
_の有る無しにかかわらずRails3.2では無理でした・・・。
0683nobodyさん2013/09/04(水) 20:53:34.43ID:0bOgciHM
すみません。質問というか助けてほしいです。心当たりあったらレスおねがいします。

rails 4.0でnginx+unicornな環境を構築中なのですが
webrickで動作させてたときはもんない無かったのにnginx通してunicornで動作するようにしたら
layout/apprication.html.erbのtylesheet_link_tag とかjavascript_include_tag で吐き出される
assetへのパスが
/assets/application.css?body=1
↓
5000/stylesheets/5000/assets/application.css?body=1

何故かunicornの動作ポート番号をパスに含むようになって、ルーティングエラーを起こすようになってしまった。

ルーティングエラーがおこらないように、元のwebrick環境のassetへのパスが表示されるように戻したいのだけども
誰か心当たりあるかたいませんか?
0684nobodyさん2013/09/04(水) 22:40:41.73ID:???
>>682
外部ファイルにしようがAjax使おうが、中身を見ようと思ったら簡単に見えるものなんだから、気にし過ぎ
0685nobodyさん2013/09/04(水) 22:45:54.82ID:???
心当たりはないが、ドメインソケットを使ってなさそうなことが気になった。unicorn使うならドメインソケットで接続しようや。

X-Forwarded-For とかがきちんと設定されてないとかもあるかもな。
0686nobodyさん2013/09/04(水) 22:47:36.17ID:???
>> 682
直接見られるのが嫌なら、Rubyで暗号化した状態でJSON出力してJavaScript側で複合化すればいい。
まぁ、それでも少し詳しいユーザがJS側のソースを見れば解読できるけど、ベタ書きよりは良いかもね。
0687nobodyさん2013/09/04(水) 23:24:04.50ID:0bOgciHM
>>685
レスありがとうございます。

nginxの設定ではX-Forwarded-For 周りは下記のように設定しています。
ドメインソケットでの接続というのがどういうことなのかわからなかったですが
upstreamでunicornのソケットファイルを指定してリバースプロキシするように設定しました。

upstream backend {
server unix:/tmp/unicorn.sock;
}

server {
listen 80;
server_name localhost;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) { proxy_pass http://backend; }
}
}
0688nobodyさん2013/09/05(木) 00:27:18.86ID:???
>>684
>>686
分かりました。素直に外部ファイルにはくことにします。

・・・ですが、すいません、***.html.erbではなくて、外部jsにはくにはどうすればいいのでしょうか?
0689nobodyさん2013/09/05(木) 06:25:29.21ID:???
>>687
この辺ですね
https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_view/helpers/asset_url_helper.rb
binding.pryでconfig.*の値を確認していくと早いかもしれない

>>688
同じアクションで振り分ける場合
respond_to do |format|
format.html
format.json{ render json: @hoge.to_json }
end

静的ファイルとして書き出す場合
filename = "himitsu/#{@user.id}.json"
open(filename, "w").write(@hoge.to_json)
しておいて、書き出したファイルをどっかのアクションからsend_fileする
0690nobodyさん2013/09/05(木) 21:49:04.91ID:cRWHLmnX
>>689
binding.pryなんて便利な物あったんですね。
rails consoleでconfigの設定値は調べてたんですが、configの値は普通だったんで違うかと思ってましたが
helper内の挙動と合わせて見直してみます。ありがとうございます!
0691nobodyさん2013/09/05(木) 22:23:50.09ID:K2FtSIKW
Heroku
http://www.slideshare.net/shunjikonishi/heroku-15670119


おいしいherokuの使い方
http://www.slideshare.net/oakbow/ss-25912016
0692nobodyさん2013/09/05(木) 23:18:17.59ID:???
>>689
ありがとうございます。
外部にはくのは諦めます
0693nobodyさん2013/09/06(金) 20:10:30.51ID:???
http://kyamada.hatenablog.com/entry/2012/02/17/154846
これの通りにgemをカスタマイズして使っているのですが、
git add .
git commit
しても、カスタマイズしたgemがRailsのgitの中に含まれません。
gitの中に更にgitがあるのが問題なのだとは思いますがどうすれぱ、Railsのgitにカスタマイズしたgemを含められますか?
0694nobodyさん2013/09/06(金) 22:27:13.77ID:???
gitの中にあるgitを削除すれば良いのでは。
それかgitignoreでplugin/active_merchant/.gitを指定してみるとか。
0695nobodyさん2013/09/07(土) 12:55:54.56ID:???
ニコニコ動画やyoutubeのマイリスト的なものを作れるgemってありませんか?
0696nobodyさん2013/09/07(土) 14:16:02.17ID:8JSXs8IY
効率の良いIDを作ろうと思うと、youtube等の使っている方法が最も優れているのですかね?
何進数か分かりませんが、規則は一般に共通なのでしょうか?
激しくスレチですみません。
0697nobodyさん2013/09/07(土) 15:57:23.21ID:???
>>696
ハッシュ
0698nobodyさん2013/09/07(土) 16:02:39.58ID:maLq26j/
to_s(36) とかでいいじゃん、と思ったがアルファベットの大文字が混じらないので、
自力で62進(26+26+10)変換すればいいんじゃね?
0699nobodyさん2013/09/07(土) 17:14:17.18ID:???
https://www.ruby-toolbox.com/projects/uuidtools

universally unique identifier (UUID)
http://en.wikipedia.org/wiki/Universally_unique_identifier
0700nobodyさん2013/09/07(土) 18:12:09.01ID:maLq26j/
UUID ver4(Macアドレスとか時刻とかを使わない単なる乱数)でよければ
標準にも SecureRandom.uuid がある。
0701nobodyさん2013/09/07(土) 19:18:48.91ID:s024vk7c
singleton method SecureRandom.uuid
http://doc.ruby-lang.org/ja/2.0.0/method/SecureRandom/s/uuid.html

Module: SecureRandom (Ruby 1.9.3)
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html
0702nobodyさん2013/09/08(日) 03:43:36.65ID:9R3fglsn
この板はかなり親切な方が多いですね。
感謝しております。

今具現化してるアイディアがうまくいけば、皆さんのように優秀な方と仕事がしたいです。
いや、単なる妄想ですが・・・
0703nobodyさん2013/09/08(日) 11:25:39.46ID:???
Railsって共用レンタルサーバーで運用できますか?

今まではvps借りて一からセコセコとMySQLやRubyを入れてます

サーバーの引っ越しとかを考えたときにアプリフォルダだけを持っていくだけでお引っ越し完了!みたいなことは無理でしょうか?

普通の共用レンタルサーバーはSSHには対応してないですよね。
Railsの場合は rake db:migrateなどSSHを使わないといけない部分がありますが
どうなんでしょうか?
0704nobodyさん2013/09/08(日) 17:13:51.42ID:9R3fglsn
webrickを立ち上げたら、こういう感じで表示され、アクセスできません。
(winscpでファイル操作をするために、winscp接続にはパスワード無しでroot権限を与えたのが原因なのか)
ご教授願えませんでしょうか?


rails server

=> Booting WEBrick
=> Rails 4.0.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server

Exiting
/usr/local/rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/server.rb:332:in `initialize': Permission denied - /home/USERNAME/APPLICATIONNAME/tmp/pids/server.pid (Errno::EACCES)
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/server.rb:332:in `open'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/server.rb:332:in `write_pid'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/server.rb:254:in `start'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/server.rb:84:in `start'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:78:in `block in <top (required)>'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
0705nobodyさん2013/09/08(日) 17:53:11.19ID:???
>普通の共用レンタルサーバーはSSHには対応してないですよね。
んなことない
さくらなんかはかなり自由が効く
0706nobodyさん2013/09/08(日) 18:09:44.42ID:???
>>704
書いてるまんま
ファイルアクセス権限がないんでしょう
0707nobodyさん2013/09/08(日) 18:30:36.49ID:9R3fglsn
>>706
ありがとうございます。
先ほどのはroot権限なしでrails serverと入力したものでした。すみません。
root権限ありでrails serverと入力すると、下記のようなものが出てきます。
先のwinscpの設定をいじくる前は、webrickは表示できていたので、そこに絡んでミスをしたのかなと・・・
基本が分かっていないため、下記への対処法ですら自ら思いつくことができません。
宜しくお願い致します。


Mysql2::Error (Access denied for user 'root'@'localhost' (using password: NO)):
mysql2 (0.3.13) lib/mysql2/client.rb:58:in `connect'
mysql2 (0.3.13) lib/mysql2/client.rb:58:in `initialize'
0708nobodyさん2013/09/08(日) 19:19:35.11ID:lyU644NF
データベースのユーザー:パスワード設定確認
0709nobodyさん2013/09/08(日) 19:54:13.17ID:eymRfFPQ
productionモードにしたら全てのjsはコンパイルされて難読化されますが
erbに書いたjsはコンパイルされません。
ですのでここも難読化したいのですが・・・

皆さんならどうされますか?
0710nobodyさん2013/09/08(日) 20:50:10.77ID:???
全ての処理を1つのページで受けて
?type1=aaa&amp;type2=bbb
を
http://example.com/aaa/bbb
といった形で処理したいのですがRailsではどうすれば良いのでしょうか?
0711nobodyさん2013/09/08(日) 21:31:51.29ID:???
get ":type1/:type2/:type3", to: "controller#action"

もしくは
get "*types", to: "controller#action"
これでparams[:types]をアクションで処理する
0712nobodyさん2013/09/08(日) 21:45:13.76ID:9R3fglsn
>>708
database.ymlのpassword欄にパスワードを記入し解決したっぽいです。
まことにありがとうございました。
0713nobodyさん2013/09/08(日) 22:20:28.69ID:???
>>711
出来ました!ありがとうございました!
今日はぐっすり眠れそうです!うおおお
0714nobodyさん2013/09/08(日) 22:21:07.00ID:???
>>709
コントローラで適当にフィルタかける
0715nobodyさん2013/09/09(月) 00:51:38.92ID:???
productionモードにおいてのjavascript難読化って
せいぜい改行がなくなるとか
そんなもんですよね?
0716nobodyさん2013/09/09(月) 01:29:12.09ID:???
ファイル名にハッシュ値がつく
0717nobodyさん2013/09/09(月) 01:49:46.55ID:???
>>716
可読性とは関係なくない?

元のhtmlソース開いて
javaacriptのurl特定して
それ開けばいいだけだよね?
0718nobodyさん2013/09/09(月) 03:10:01.54ID:UOPspRhy
例えばユーザーの登録を行う時に、
国→主要行政単位(prefecture等)と選択させていく時、

どういう構成にするのが効率が良いのでしょうか?
ターゲットとなる国々の主要行政単位を別のテーブルに登録しておいて、ユーザーテーブルに関連付けるのが良いのでしょうか?
0719nobodyさん2013/09/09(月) 03:32:07.99ID:UOPspRhy
>>718
同じような質問がありました。
この対応で良さそうです。
http://stackoverflow.com/questions/14024281/how-can-i-show-only-the-prefecture-that-belongs-to-selected-country


ちなみに、オプションに表示される国名や県名などを多言語化する場合はどう扱ったらよいのでしょうか?
select_collection等の選択肢として用意している項目の多元化です。
国や行政単位に使うわけではないのですが。
0720nobodyさん2013/09/09(月) 04:27:18.98ID:UOPspRhy
>>719
http://d.hatena.ne.jp/akishin999/20120802/1343875095
バックエンドにデータベースを利用。
これは良いかもしれませんね。
これなら、YAMLをいちいち編集しなくても、もしかしたら協力ユーザーにデータベースを整理整頓してもらうこともできるかもしれない。

そろそろ会社で支障が出る時間帯だ。寝ます。
0721nobodyさん2013/09/09(月) 08:49:11.20ID:???
>>709
難読化じゃなくて軽量化を目的としてると思うけどこれで出来た
after_filter :uglify, only: :js_no_action
def uglify
response.body = Uglifier.compile(response.body)
end
0722nobodyさん2013/09/09(月) 10:12:46.63ID:???
誰か>>717についてコメントお願いします
0723nobodyさん2013/09/09(月) 10:18:09.95ID:???
>>719
その回答の中では解決してなさそうに見えますが
0724nobodyさん2013/09/09(月) 11:32:07.37ID:???
>>717の言うとおりで難読化とはまったく関係ないと思います。
フィンガープリンティングはキャッシュ対策。
0725nobodyさん2013/09/09(月) 15:51:51.69ID:???
Ruby on Railsやばすぎ
別サーバーに移転しようとして
環境deployしてたわけよ

passengerや使用gemのバージョンが1つでも少し違うだけで動かないwwww

gemどころかpassengerやrubyのバージョンまでとは。。。
1.92だと動いて1.93だと動かない!


依存関係がシビアすぎて鬱になる

一度構築した環境はもう二度と再建できないと思って取り組んだ方がいいね
0726nobodyさん2013/09/09(月) 17:37:58.07ID:???
404 Blog Not Found:そろそろPHPに関して一言いっとくか

PHPでいろいろやるためには、実際にはさまざまなライブラリーをあらかじめインストールした上で、
PHPをそれに合わせてconfigureしなおさなければならない。
こうして作られたlibphp#.soは、どれも微妙に、しかしユーザーにとっては耐え難く異なる。
http://b.hatena.ne.jp/entry/blog.livedoor.jp/dankogai/archives/50835571.html
0727nobodyさん2013/09/09(月) 19:58:42.11ID:UOPspRhy
>>723
本当ですね^^;

http://itmemojp.blogspot.jp/2012/10/rails.html
ajax + jquery というのが正解のようですね。。。
ここに紹介されているもので、�@都道府県がユーザー個々の登録情報(千葉県、埼玉県等)でデフォルト選択(市町村も該当のもの)できたりすると良いのと、
�A選択肢が多言語化できれば良いのですが(例えば、東京、tokyo。さらに欲を言えばヒラガナ等もヒモ付られれば)。


御回答くださりありがとうございました。
0728nobodyさん2013/09/09(月) 20:05:29.13ID:???
>>725
bundler使え
0729nobodyさん2013/09/09(月) 20:46:13.15ID:???
>>714
>>721
ありがとうございます。

ただし>>721だとコンパイル通りますか?
0730nobodyさん2013/09/09(月) 20:52:49.76ID:???
すいません、コンパイルは通りましたが、難読化されませんでした

after_filter :uglifyはいいとして、あとのオプションは only: :js_no_actionでいいのでしょうか?
0731nobodyさん2013/09/09(月) 21:02:34.36ID:???
>>727
usersテーブルにcountry_idやcity_idを追加したとして、
多言語化はここの(6)を参考に
http://morizyun.github.io/blog/i18n-english-rails-ruby-many-languages/
Country#name がlocaleに適切なカラム(name_jaやname_en)を返すようにする。

デフォルトの選択は
@countries = Country.all.map{ |country| [country.name, country.id] }
select_tag(:country, options_for_select(@countries, selected: @user.country.id))
こうなるんじゃないかな

options_for_selectに渡す@countriesのところはもっと綺麗に書けるかもしれない。
0732nobodyさん2013/09/09(月) 21:50:15.35ID:???
acts_as_commentable_with_thread などのgemには
誰が投稿したか?のuser_idのカラムが存在します

もしuser制を実装せずに誰でも投稿できるようにするにはどうすればいいのでしょうか?

まずモデルでuser(そもそも存在しない)とcommentsを関連づけないのか?

それともuserモデルはダミーで作り
2ユーザー(adminとguest)のみ作っておいて関連づけるのか?
0733nobodyさん2013/09/09(月) 21:50:47.16ID:???
>>730
productionと同じ動作のはずだよ。つまり難読化されない。
どうしても難読化したいなら、jsmin、yui-compressor、sqwish、closure、あとsassのやつとか
コンプレッサーのライブラリがあるみたいなんで、中には難読化してくれるものもあるかもしれない。

only: :js_no_actionのところは通常のHTMLにもUglifier.compileすると
エラーになるからjsを返すアクションに限定してフィルタをかけてという意味
もし同じアクションで複数のフォーマットを返すことがあるなら
response.content_typeでjs以外の場合はcompileをスキップさせて。
0734nobodyさん2013/09/09(月) 22:11:21.80ID:???
>>733
すいません、難読化の定義が曖昧だったようですが

・コメントが削除される
・空白やスペースが極力削除される
・変数名が一文字になる

というのを難読化と呼びました

productionで.jsをコンパイルしたら、確かに上の3つは実施されておりますが、
hoge.html.erbに書いたjsに対してそれを行いたかったのです。



application_controller.rbに、uglifyメソッドを定義して、
目的のhtml.erbをレンダリングするcontrollerにafter_filter :uglify, only: :js_no_actionを書きましたが、
erbに書いたjavascriptには変化はありませんでした


ちなみに、only: :js_no_actionって、rubyの文法的には、:js_no_actionはシンボルであり何かの引数だと思いますが
only:はなんなのでしょうか?
0735nobodyさん2013/09/09(月) 22:14:14.11ID:p6whV7Wi
Ruby 1.9から使える、シンボルをキーとしたハッシュリテラル記法
only: :js_no_action と :only => :js_no_action は等価。
0736nobodyさん2013/09/09(月) 22:46:44.36ID:???
ごめん。productionで変数は短縮されないと思いこんでたけど確認したら短縮されてた。

>>721では変数全部じゃなくてfunctionの中の変数だけ短縮されるみたいだ。
productionでも同じ動作かは確認してない。

https://github.com/lautis/uglifier
ここにuglifierのオプションが書いてあるんだけど
function外の変数を短縮する方法が見つけられなかった
0737nobodyさん2013/09/09(月) 23:24:23.12ID:???
>>735
ありがとうございます。

>>736
ありがとうございました。

今のところfunctionの中でも短縮化化されてないようです。
後出しですいませんが、今回やりたいのは、hoge.html.erbの中でrender :partialしているfuga.html.erbでした。
それだと、hoge_controllerにafter_filter書くだけではダメなのでしょうか・・・
0738nobodyさん2013/09/09(月) 23:57:44.96ID:???
>>709 のerbに書いたjsってfuga.js.erbじゃなくて、
fuga.html.erbにjavascriptが書いてあるってこと?
もしそうなら、俺の書いた事は見当違いかも・・・
0739nobodyさん2013/09/10(火) 00:52:16.17ID:PCxtq6wU
>>731
仮眠終了しました(笑)
今から取り組みます。

この板は親切過ぎて、甘えてしまっていますが、どうか宜しくお願い致します。
0740nobodyさん2013/09/10(火) 05:04:34.43ID:PCxtq6wU
>>731
明日は、先ほどの例で、都道府県を選択したら、
市町村のメニューそのものが表示されるようにしてみたいと思います(最初は表示されていない)。

ありがとうございました。
0741nobodyさん2013/09/10(火) 09:56:44.36ID:???
>>737
もし、HTMLの中にjsがベタ書きしてあるのなら、

ヘルパーに追加
def ugly_javascript(&code)
javascript_tag(Uglifier.compile(capture(&code)))
end

ビュー
<%= ugly_javascript do %>
function nanika(hoge){
alert(hoge);
var fuga = "fuga";
alert(fuga);
}
var dame = "dame")
nanika(dame);
<% end %>

これでこう出力された
<script>
//<![CDATA[
function nanika(a){alert(a);var n="fuga";alert(n)}var dame="dame";nanika(dame);
//]]>
</script>
0742nobodyさん2013/09/11(水) 08:20:27.07ID:???
>>738
>>741
ありがとうございました!
0743nobodyさん2013/09/11(水) 19:42:09.90ID:K4ZJ810j
>>727
のサイトさんの、
「 _todoufuken_select.html.erb 」は、

$("#jusho_shichoson_id").html (省略)・・・
<%= f.select(:shichoson_id, (省略)・・・

この2行で、この並びで問題ないのでしょうか?
(rails4では、find(:all)が使えないようなので、whereで対応しました。)
0744nobodyさん2013/09/11(水) 19:51:08.09ID:???
ざっとしか見てないけど
$("#jusho_shichoson_id").html... は
_todoufuken_select.html.erbじゃなくて、
todoufuken_select.html.erbの間違いだと思う。
つまり別ファイル。
0745nobodyさん2013/09/11(水) 20:10:37.43ID:7odvwZmt
スタートアップ企業で8年間Webの開発をしてみての反省点いろいろ - Masatomo Nakano Blog
独自フレームワークはやめよう
6. サーバ周りの人材をしっかり確保しよう
b.hatena.ne.jp/entry/blog.madoro.org/mn/84
0746あ2013/09/11(水) 20:14:42.56ID:7odvwZmt
あと先に書いたように、既存のフレームワークを利用しないので、「フレームワーク固有の知識」みたいなのが要求されなくて良いです。
ほら、結構重厚なフレームワークとか賢いフレームワークとかって、使いこなすためには一定の学習量が必要じゃないですか? そのコストがほぼ無い。
moznion.hatenadiary.com/entry/2013/09/11/163554
0747nobodyさん2013/09/11(水) 20:46:18.97ID:???
あー >>744 は忘れて。

$("#jusho_shichoson_id").html... は
todoufuken_select.js.erb に書くっぽい。
0748あ2013/09/11(水) 20:47:42.52ID:7odvwZmt
外の資源(ドキュメント/本/Google検索)が使えないので自前ですべて教育をしなくてはならない。
また、独自であるが故に、そのフレームワーク等の経験者を採用することもできない。
新しく入った人は常に0からのスタートになる。
blog.madoro.org/mn/84
0749nobodyさん2013/09/11(水) 22:10:13.17ID:K4ZJ810j
>>744 >>747
いつも?ありがとうございます。
jsファイルのことですね!!やってみます。

使えるようになるまであと数日かかりそうな悪寒はしますが、やってみます。
素人にとって、find(:all)の廃止から既に大きなトラップでした^^;
0750あ2013/09/12(木) 10:10:38.30ID:Jrvdbuq2
自分でサーバ立てるのってなんか楽しそうだしスゴそうだよね?
サーバ立てるのなんてちょっとパソコンに詳しければ簡単にできるんでしょ?
ハードウェアの多重化なんて必要?
企業で使うとかじゃなく個人的に細々と立てたサーバが攻撃されることなんて滅多にないよね?
攻撃が来るって言ったって大した数じゃないんでしょ?
攻撃されたって大したことは起きないんでしょ?
b.hatena.ne.jp/entry/tmaeda.s45.xrea.com/20041101.html
 
0751nobodyさん2013/09/12(木) 19:58:34.11ID:???
sessionにデータが格納されていた場合に、
対応する入力フォームのテキストボックスにそのデータをセットしたいのですが、
どのように書けば良いか分かりませんでしたので質問させてください。

params[session_name] = session[session_name] unless session[session_name].blank?

上記の記述でいけるかなと思いましたが、これではparamsにデータが入るだけで
入力フォームにデータをセットすることはできませんでした。

初歩的な質問で申し訳ありませんが、ご教示の程よろしくお願い致します。
■ このスレッドは過去ログ倉庫に格納されています