【Ruby】Ruby on Rails Part7
4 :
3 :2009/04/30(木) 23:15:06 ID:???
>>1 のつづき
現在、RubyはPHPが支配する世界の陰で細々と生活しております
表向きはPHPerで、裏でせっせとrubyっていましょう
たまにはperlのことも思い出してあげてください
無理です
これって、サーバーのroot権限不要で 動作させられるようにならないの? cakephpはできてるよね?
お前は何をいってるんだ
これってさー サーバーの管理権限がないと 動作が遅すぎて重すぎて、 まともに動かせないんだよね?
rails対応謳ってる所でも無い限りそう
cakephpってさ、 サーバーの管理権限なくても まともなスピードで動くんだよね?
それはCakePHPのスレで訊いた方がいいんでないかい?
重い重いと言われ心配したがサクサクじゃん。 これでダメって、最低1日2〜30万PVはあるんだろうな。
共有鯖とか元々重い所で動かそうとしてるだけだろう。
共有鯖ってfast_cgi使えないことないか? 俺は趣味アプリが完成したらさくらインターネットの専用サーバ借りる予定。 月8,000円くらいだったかな。
共有鯖で使えるところはみかけるけど、ちょっと負荷かけるとダメポになるとかそんなんばっかだ
なんでcakephpは管理者権限ないところでも 十分なスピードで動くのに、 ruby on railshs動かないの?
膨大な量のクラスをロードするから起動に時間がかかる。 一度ロードしてしまえばそれなりに動くが、単純なCGIではそうもいかない。
管理者権限があるサーバーでは なぜ動作が速くなるの?
「管理者権限があるサーバー」ってVPSのこと言ってるのだろうか 聞き方があまりにも幼稚すぎて答える気にならんな 社会性のかけらも感じられない
痛いところを突かれるとしどろもどろになるなんて、 子供みたいでカワイイ
24 :
nobodyさん :2009/05/03(日) 00:06:05 ID:rx1Rm2aS
はやくrails3こないかなー
GWで変なのがわいてきた・・・
rails楽しいな〜。 GW中開発三昧だ〜。
さくらのサーバー安いなと思って調べたら、 回線を太くするととたんに高くなるんだな。 10MだったらVPSでも問題ないだろうし微妙だと思った。
>>19 CGI駆動だとRailsはメチャメチャ重いからだろ
PHPが標準のモジュール駆動だと重いといわれるCakePHPもそこそこ動く
だが、共有レンタルサーバーの多くはphpもCGI駆動だから気をつけれ
Railsをまともn動かす時は、Passengerとか使うのでそうなると、
多くの共有サーバーは入ってないので、管理者権限いるってこと。
ただ、まともにサービスしようとしたら、いろいろ弄る必要があるから、
結局管理者権限ないと話にならんが
既に回答を貰っているのにそれが理解できずに勝った気になるって痛いな。
32 :
nobodyさん :2009/05/03(日) 14:37:31 ID:C26VReX1
VPSでも国内だと高いけどね。
VPSで2000円くらいのやつ使ってる。たぶん国内だと一番安いくらいかな。 海外だともっと安いのがあるのかもしれないけど、おれは満足してるよ。 ブラウザベースの管理アプリも用意されてて割と便利だし。
プリーズってなにを?plzって初めて見たからぐぐってしまった。
おそらく、このplzはkwskと翻訳すればいいのではないかと。
adminってコントローラ作って、管理者が全てのテーブルをメンテナンス できるような設計にしようと思ってるんだけど、rails的にどうなの? 一般利用者はほとんどのテーブルに対して参照ばっかりだから、 それぞれのコントローラのupdateやdelete、insertを発行するメソッドは 管理者のみ、っていう方法もあるんだけど、どうしたらいいんかな〜。
adminコントローラ1個だとごちゃごちゃするから admin/userとか階層作って管理する方法を自分は採用してる。
>>38 管理用コントローラに、メソッドを追加するっていうこと?
40 :
38 :2009/05/04(月) 10:34:22 ID:MqCVRAIX
>>39 Admin::UserControllerを 作ってlistやdeleteアクションを定義する感じ。
>>40 ありがとう。37です。
あんま想像つかないけど、そんな方法があるのか。
結局自分は、コントローラとモデルとテーブルを1:1:1になるよう用意することにして、
(コントローラは増えることもあるけど)
各コントローラの参照系以外のメソッドに管理者認証を求めるフィルタを設定した。
42 :
nobodyさん :2009/05/07(木) 15:29:56 ID:6IKl0wLq
すいません質問させてください。 カラムがid, user_id, name のテーブルがあったとして、それのActiveRecord::Baseの継承クラスのインスタンス5つが配列aに格納されているとします。 この配列aの中に、user_idが5であるインスタンスがあった場合それを取り出し、なかった場合nilかfalseを返すような処理を書きたいのですが、どう書くのが一番スマートでしょうか?? ご教示頂けると幸いですm(_ _)m
>42 まず、あなたなりに書いたらどうなるの? その後教えてあげます。
>>42 既にふつうの(=ARのHasManyProxyなどでない)配列になっているっ
てことだよな?
Enumerable#find / detectでも好きに使えばいいじゃん。
45 :
42 :2009/05/08(金) 00:27:37 ID:XobVG3ns
>>44 ありがとうございます!
findの使い方よくわかっていませんでした。。
>>41 コントローラはnamespace使って管理側とユーザ側で分けた方がよいね
script/generate controller admin::users
routes.rbもnamespace使える
map.namespace(:admin) do |admin|
admin.resources :users
end
:butyo とか :tanto とか :baito とかもあると統制上便利。
>>46-47 なるほど・・・。
名前空間でコントローラを整理できることを知らなかった。
ありがとう!
一般ユーザと会員ユーザ、システム管理者からなるシステムを作っているのだけど、
作り直そうか迷うなぁ。
わけた方がすっきりするんだろうけど、一般ユーザと会員ユーザの出来ることは
ほとんど同じなんだよなぁ。
今すぐに作り直す必要はないと思うよ。 長く運用してると、機能追加などで次第に一般ユーザと会員ユーザの違いが 大きくなっていくので、そのときに整理し直してもいいと思う。
むしろ意味的・機能的に全く別物でない限り、一般ユーザと会員ユーザはコントローラ分けないほうがいい場合もある システムごと分離するか、コントローラを分割するか、ユーザのrole機能で対応するかは適材適所やね
一括だとロールに突っ込めると便利だけど、ロールの使い方知らないと涙目。
>>49-50 とりあえずそうしてみる。
何回か組んで失敗しないと、理想的なrailsプログラムは組めないと感じた。
53 :
nobodyさん :2009/05/11(月) 23:14:24 ID:2slawtRU
Rails + rspec + rspec-rails で開発しています。 Rails 2.1.1 / rspec 1.1.12 / rspec-rails 1.1.12 spec ファイルにおいて、 fixture のデータがロードされたり消されたりする タイミングがわかりません。 hoges テーブルに対する Hoge というモデルの spec ファイルを作っていて、 以下のようになっています。 describe "○ができること...01" fixtures :hoge it "A..." do end end describe "○ができること...02" fixtures :hoge_for_some_cases it "B..." do end it "C..." do end end describe "○ができること...03" fixtures :hoge it "D..." do end end
54 :
53 :2009/05/11(月) 23:16:54 ID:???
hoges テーブルに対する fixture(ymlファイル) を2種類作っているのですが、 describe "○ができること...02" が走って fixtures :hoge_for_some_cases がロードされた後、 describe "○ができること...03" の it "D..." do が動くときに、 fixtures :hoge_for_some_cases で insert されたデータが残っているようです。 これは describe "○ができること...03" で期待する条件とは違うため、テストが失敗します。 ○質問1: fixture によるデータ投入は、spec が起動されるときに一度だけなのか? fixtures という行を通過する度になるのでしょうか? # fixtures という行を通過する度に、 # delete from foo と # hoge.yml の中身の全件 insert が走る? describe "○ができること...02" のブロックを消し、fixtures :hoge_for_some_cases が動かないようにするれば、 describe "○ができること...01" も describe "○ができること...03" も動きます。 ○質問2: fixtures :hoge_for_some_cases の中身をfixtures :hoge に書いてしまえばいいのでしょうが、 データ件数が多いため、describe ごとに yml ファイルを分けたいのですが、これは rails 的ではないのでしょうか? ○質問3: また、ひとつの describe が終わるごとにデータが truncate されるとうれしいのですが、それはどうすればいいのでしょうか? (これも Rails 的ではない?) ○質問4: ちなみに spec を実行後に DB の中身を覗くと、レコードが残っているので、これはそういうものみたいですね。 ※fixture で投入されたデータのトランザクションと、 テストメソッドの中で model.save 等で保存されるトランザクションは違う?
55 :
鉄道教信者{鉄ヲタ(鉄道マニア)} :2009/05/12(火) 00:01:43 ID:i2JJHx+d
あるレンタル鯖でのトラブル 障害発生期間 : 2009 年 03 月 06 日 現象 : 1. 全サービスが使用できない。 原因 : ・モデムの電源ケーブルが外れていた。 現在 : ・モデムの電源ケーブルを挿し直しました。 hahahaha!
よくある話 掃除のおばちゃんが掃除機のコンセントがないからと 勝手に電源ケーブル抜いてそのまま忘れて帰るんだよ
もろひろゆきじゃん
58 :
nobodyさん :2009/05/12(火) 20:36:18 ID:8mXS3koF
すいませんちょっとお聞きしたいのですが if x=='dog' Dog.find :all elsif x=='cat' Cat.find :all elsif x=='horse' Horse.find :all end
59 :
58 :2009/05/12(火) 20:37:09 ID:8mXS3koF
のようなことをしたいんですが、これって一行で書けないでしょうか? 教えて頂けると幸いです。
fixtureなどさっさと捨ててしまえ 代わりにfactory girlをどうぞ
一行ったって意味合いが色々あんだろうが 単純に一行にするなら↓ if x == 'dog' then Dog.find :all elsif x == 'cat' then Cat.find:all else Horse.find :all end モデルに多態性を持たせたいのならSTIかポリモルフィック関連を調べてちょ
elseとか考えなくて良いなら x.classify.constantize.find :all
977 名前:nobodyさん[] 投稿日:2009/04/27(月) 20:17:33 ID:ty2d5Btl すいません分かりにくかったかもしれないと思ったので書き直します・・ if x='friends' User.friends elseif x='pearents' User.parents else x='children' User.childern end を一行で書けないか・・みたいな感じです。 978 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:24:34 ID:??? User.send(x) 979 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:26:28 ID:??? > 977 User.method(x).call
64 :
58 :2009/05/12(火) 21:04:34 ID:8mXS3koF
>>61 >>62 レスありがとうございますm(__)m
>classify.con...
うおぉぉ。。
rubyすごすぎる(笑)
>>62 xが外部入力だったら超怖い気がするのです…w
フィルタかける方法ないの?
じゃ、 x.classify.constantize.find(:all) if ["dog", "cat", "horse"].include?(x)
>>64 ビジネスロジック層で得意げにメタプログラミングを駆使とか絶対やめとけよ・・・
いつか刺されるぞ・・・
それでソースがすごくすっきりするならいいと思うけど困るときもあるね 「使いたいから使う」みたいなのもたまに見かけるし
>>50 >ユーザのrole機能
そんな機能があったんかー、しらんかった。pluginかな?
ActiveRecord継承のRoleモデルつくってた。
まだ初めて半年だけど、もう以前の環境(php)には、戻れなウィッシュ。
単にrole based access controlを実装するという話だと思った。 確かにActiveRbacというプラグインもあるけど。 概念はRails Recipesにも載ってるね。
よくわかっていない質問ですまないのですが、お聞きください。
こちらのwebベースrailsコンソールのgeneratorプラグインを使ってみようとしているのですが、
eviltrout's kawaii at master - GitHub
http://github.com/eviltrout/kawaii/tree/master 通常のプラグインのインストールのように、
ruby script/plugin install git://github.com/eviltrout/kawaii.git
とするのではなく、ダウンロードしきて、lib/generatorsに放り込め、とあるのですが、
つまりこれは、lib/generators放り込むところが手動になってしまいます。
こういうのって、上記のようにインストールしただけでgeneratorに組み込めるようなプラグイン側の仕組みってないものでしょうか?
まあ、公式にも別途あるように、一度~/.rails/generatorsにいかに入れとけばいいという話もあるのでしょうが…
kawaii公式のインストール項目抜粋
> 1. Install the Kawaii generator
>
> If you want to generate Kawaii in multiple rails apps:
> Copy the kawaii directory to ~/.rails/generators
>
> To install for one rails app:
> Copy the kawaii directory to your application's lib/generators directory.
> (You might have to create lib/generators yourself.)
vendor/plugins/プラグイン名/lib/generatorsにファイルがあれば、 generatorとして認識される。 こいつがそういう配置になってないだけ。
@categories = Category.find(:all, :order => :category) 上記はcategory ascでソートされますが、これをcategory descで ソートされるようにするのにいい方法はありますでしょうか? :order => 'category desc' とすれば一応できたのですが、これだと テーブルのカラム名を直に入力してしまうので、これをやってしまっていいのか迷っています。 よろしくお願いします。
:orderの値には「SQLの一部」を書くことになっているので、その方法でOK。 シンボルを書けるのは、単にSQLに埋め込むときにシンボルを #to_s した ものが入るから。
なるほど、レスさんくす。 通常あり得ないとは思うけど、カラム名が変わったときにシンボルで指定できると 修正が1カ所ですむけど、カラム名直書きしてしまうと、そのカラムが含まれる すべての箇所を修正しないといけないから、何かスマートな方法あるかなと思っただけなんだ。
class Category named_scope :by_category_asc, :order => 'category ASC' named_scope :by_category_desc, :order => 'cateogry DESC' end としておくと、 Category.by_category_desc.find(:all, :conditions => '...') などと書ける。 パラメータはマージされるので何度もSQLが走るということもない。
なるほど、ありがとう! 上の方法の方がスマートなので、そっちで書いてみます。
> カラム名が変わったときにシンボルで指定できると修正が1カ所ですむけど この意味が分からないのだが、 例えば「category」カラムの名前が「business_category」に変わったとしたら、 その1カ所をどういうふうに修正するの?
すみません、シンボルをどこかに実体があって、それを シンボリックリンクのように参照しているものだと妄想してました…。
>>79 なるほど、了解。自分が知らない重大なことかと思ったよ。
>>72 なるほどやっぱりそうなんですね。
というか、railsのソース見てて思ったんですが
Rubygemsでも特定の配置にしたら、railsのgeneratorとして読み込んでくれるんですね。
利用者としてはこっちの方が簡単だ。
ちゃんと動くの確認したら、gems化の要望出しときます…。
ところでアプリケーションテンプレート使ってる?
何となくどんなの使ってるかしりたいんで皿島元々
plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git'
plugin 'forgot_password', :git => 'git://github.com/greenisus/forgot_password.git'
plugin 'role_requirement', :git => 'git://github.com/timcharper/role_requirement.git'
gem 'mislav-will_paginate', :lib => 'will_paginate', :source => '
http://gems.github.com '
gem 'rubyist-aasm', :lib => 'aasm', :source => '
http://gems.github.com '
gem "capistrano-ext", :lib => "capistrano"
rake("gems:install")
generate("authenticated", "--include-activation", "--aasm", "user", "session")
rake("db:migrate")
generate(:controller, 'welcome', 'index')
route "map.root :controller => 'welcome'"
run "rm public/index.html"
run "rm public/images/rails.png"
file ".gitignore", <<-CODE
.DS_Store
log/*.log
tmp/**/*
db/*.sqlite3
doc/api
doc/app
CODE
run "touch log/.gitignore"
run "touch tmp/.gitignore"
git :init
git :add => "."
git :commit => "-a -m 'Initial commit'"
いかん。すげー中途半端なテンプレだな。 なにやりたいかってbortぽいのをアプリケーションテンプレート使って作りたいんだけど素人は一からコツコツやれってことだろなぁ。
>>82 自分はまったく使ってないわ。
そんなに新規で作る事が少ないというのもあるけど、
一から設定するのもそれほど手間じゃないから。
今よく使うのはこんなもんかな。
mislav-will_paginate
jpmobile
postgres
rmagick
i18n_genrators
mongrel
mongrel_cluster
バージョン管理はSubversion。
そのうちgitも試してみたいと思う。
公開する時は、Passengerを使う事が多くなってきたけど、
スペックが低いサーバだとPassengerよりmongrelを複数起動して、
Apacheのproxy_balancerで動かすほうがレスポンス早いので、mongrelもしばらく使うつもり。
85 :
82 :2009/05/18(月) 00:04:25 ID:???
>>85 mongrel 使ったことないということだけど、
普段(ローカルの開発環境) は webrick 使っていて、本番環境は Passenger を使っているの?
87 :
82 :2009/05/18(月) 01:22:25 ID:???
>>86 うん
開発webrickで本番Passenger。
monoで開発してた時も開発XSP本番mod_monoだったなぁ。
なんとなくapacheの方が安定してるのかなぁという思い込みでt
なぜ今さらMongrel? もう1年くらい開発止まってるでしょ。 今ならThinかEbbじゃないの。
89 :
86 :2009/05/18(月) 02:32:23 ID:???
>>87 なるほど、どうもありがとう。
>>88 私はRailsはじめて2ヶ月弱なので、そういうのがわからないんです。
職場のプロジェクト環境が、ローカルの開発環境は mongrel で(gem install だけで入るし、Windows でも動くので)、
本番をどうしようかと話していてます(本番は passenger の予定)
Passenger が出てくる前は、雑誌やwebを読んでいて、
fastCGI、lighttpd、apache + mongrel_cluster という組み合わせがあったけど、
いまは本番運用ではどれが定番なんですか?(Linuxの場合)
Thin と Ebb というのは初めて知ったのでこれからググってくる。
ここのスレ見て参考にしてPassengerにしたら1日半に1回くらい順調に落ちる。ありがとな。 ホスティングだからメモリの問題だとは思うけど。
2年前くらいにrailsはアジャイルだって騒がれてたけど 今でもrailsは開発早いの? それとも何か新しいのでた? ほかの言語もrails並に早くなった?
結局、腕の善し悪しに左右されます
バージョン頻度と、その互換性のなさに少し微妙な空気が流れている気がする
ほんとバージョン管理しんどいな rails3がでてmerbと統合したら、、
rails は黒魔術が多いなぁ。 複数人でやると、こんな書き方があるのかーというばかり。 聞けば分かるけど、読んだだけではすぐには分からない書き方が多いような気もする。
読んで分からんというか、そこだけ読んでもわからんというのはある。 動的にメソッド追加してて、どこに定義があるのかctagsで追えないとか。 でも勘とgrepでソース読めばなんとかなるレベルだとは思う。 ruby-debugがマシになってきて、railsの動的なコードの山もあまり怖くなくなってきた気がしなくもない。
始めて数日のひよっこだけどメソッドを追えないのは 規定を知らないだけで開発効率関係ないと思う 動的にメソッド入るならコメも入れてよって泣きながら探してる
railsって始めるのに何をしたらいいの? rubyを書けること? MVCを理解すること? railsの統合開発環境をインストールして、どっかの本を見ながらいじればいいの?
APIが理解できれば何とでもなる
>>100 プログラム初心者だと大変かもしれない。
Ruby初心者でも他の言語の経験があれば大丈夫かな。
Rubyが理解できる事が必須だけど、Railsと一緒に覚えていけばいい。
まずは環境のインストール方法が分かりやすく載っている本を買って
そのとおり進めていくほうが迷わないのでおすすめ。
本が扱っているバージョンはちょっと古いけど、そのバージョンに自分の環境を合わせる事が大切。
うっかり最新版を入れてしまうと、Railsの仕様が変わっているために迷子になってしまう。
railsで何を作るかをまず決める
何が作れるか分からない 例えばPHPならデータベースへの接続がしやすいとか、 なんとなーくこういうのに向いてるよっていう指標は無いの? と、全くrubyを知らない俺が聞いてみる。
PHPでやれることはRailsでもできる 好みの問題という気がする。
Webで公開されているAPIがjavaのとき Railsでは使えないの? それとも使えるrailsのgemがあるの?
Web APIということはHTTPを喋って何らかのボディを返すと いうことなので、ふつうは言語不問。 ボディの内容を解釈できるかは足回り(XMLとかJSONとかなら パーサが要るわけで)次第。
レスをそのまま解釈すれば、 普通のAPI(どこかに落ちててWebでダウンロードできる)だと思うけど
Rails3ってでた?
出たよ。なかなか好印象。
RoRの開発環境って色々あるけど、 今は何を使ったらいいの?
IDEは重いからエディター派 Rinari+emacsか macならtextmateがオヌヌメ
time_selectとかdate_selectのデフォルト値ってどうやって変えればいいですか? from_forでf.time_selectだと:default => {:hour => }があるみたいですが、 time_selectだと上記オプションでは上手くいきません。 Controller側に設定したい時間オブジェクトがあるのでデフォルト値をそれにしたいのですが…。
114 :
113 :2009/05/21(木) 13:29:08 ID:???
すみません、自己解決しました。
115 :
nobodyさん :2009/05/21(木) 18:30:28 ID:Fhc0Zbqv
>>111 ・Aptana RadRails重い
・NetBeans めちゃ軽い ただし、rspec、autotest等最新版に対応してないので、小細工がいる。(動かせることは動かせる)
6.7で対応するんだろ?
>>116 Betaで開発してもOKなら、6.7でもいいと思うよ
betaで良ければって言うけど、正式板リリースは6月じゃなかったか?
attachment-fuで画像とかをmysqlに保存しようとするとバイナリデータが ぶっ壊れるんだけど、同じ現象解決した人いないか? file_fieldメソッドをviewに読み込んでPOSTしてるんだけど、 受け取ったファイルを試しに自作のBLOB型のカラムに 自作table.blob型のカラム = params[:file_fieldのid].read で保存したら正しく保存されたっぽい。 rails2.3.2 attachment-fuプラグインは、:storageオプションを:db_fileにすると db_filesテーブルに保存してくれるようだが、中を覗いてみると バイナリがかなり欠損して、元ファイルの1/5くらいのサイズになっている・・・。
データサイズを指定しいたりしてw
それ共有鯖で無茶してるだけじゃないの?
RoRって作るのはすごい速いらしいけど、 覚えるのは何ヶ月くらいかかるの?
HTMLとCSSとSQLとRubyをマスターしてるなら覚えるのはRailsの規約だけ
>>121-122 いや、ローカルの開発サーバ…。
windowsなのが原因なのかもしれん。
とりあえずレスありがとう。
WindowsだとFileをテキストモード(笑)で読んでるところがあって、それで壊れたということがあったよ。 パッチ送った気がするけど、スルーされてたのか。。。 中で一時ファイルとかをFile.read(path)的に読んでるところがあったらそれをFile.open(path, "rb", &:read)に 書き換えればうまくいくのではないだろうか。
127 :
nobodyさん :2009/05/24(日) 01:42:02 ID:xGQhsS/X
質問させてください。 よくない例かもしれないのですが、 person.parents << parent = Parent.new person.children << GrandParent.new(:grand_parent_id => parent.id) person.save みたいなことがしたいのですが、これだとChild.grand_parent_idがnilになってしまいます。 このような場合で、あるテーブルと、そのテーブルにhas_manyな関係のテーブル2つ(合計3つ)を同時にsaveするうまい方法があったら教えていただけないでしょうか?? ご教示頂けると幸いです><
>>127 少し面倒でも、トランザクションの中で1つ1つsave!するほうが確実だと思うよ。
トランザクションだから同時に保存するという要件も満たしているし。
begin
ActiveRecord::Base.transaction {
parent.save!
person.save!
children.save!
}
rescue Exception
end
多対多の関連があるテーブルで相手要素をチェックボックスで選択するようなフォームをエレガントに作ったよって人いる? 例) 興味のある麺類を選んでください。 □ うどん □ そば □ きしめん ↑ユーザプロフィールと麺類を多対多で関連づける 最初はact_as_bitsで実装して上手く行っていたのだけど、要素の順番を保存できないのと 要素を動的に追加したいという要望がでてきてact_as_bitsでは対応できなくなったぽい んで、代替策として多対多の関連を定義して対応することにしたんだけど、 railsのモデル更新系フォームヘルパが複数選択のチェックボックス(パラメータを配列で送る)に 対応してないじゃないですか! 仕方がないのでチェックボックスのname属性を自力で書き換えたり モデルにチェック/非チェックを返すアクセサメソッドの定義を追加したりしたんだけど なんだかすごいメンドクセーという次第でして この辺を上手いこと解決できる方法やプラグインなどはないでしょうか? 要望としては、できればcheckbox_tagは使いたくないです
自分でつくれば?
自分で作るぐらいならrailsを使わないほうが簡単な現実。
や、動くもの自体は既にできているのですが、もっと上手い方法があるかなーと思いまして
「動く」ってビット列でその手のデータを保存するなんて・・・
データの内容は例であって本筋とは関係のない話です 実物は集計する必要もない項目ですが、こっちの方がイメージしやすいかと思いまして
>>131 プラグインくらいつくらないの?
それじゃrailsをつかいこなしてるとはとてもでないけどいえない
redmineの質問なのですが、Rails製なのでここでもよいですよね? Windowsで動かしてみているのですが、redmine.batに以下を書いて、 ruby script/server -e production -p 2900 batを起動すると、DOS窓?が開いた状態になってしまうのですが、 これを開かないで実行しておくことはできないのでしょうか? rubyw script/server -e production -p 2900 だと、タスクマネージャで見ているとrubywがすぐに終了してしまいます… Portable化したいので、サービス化以外の方法で行いたいのですが…
137 :
136 :2009/05/25(月) 14:21:47 ID:???
>>136 ですが、
Railsスレの過去ログ見てたら解決策がありました。
バッチファイル化しなければよかったんですね…。
例えば、ショートカットを作って、
ruby script/server -e production -p 2900
を割り当てて、作業ディレクトリをredmineのものにしたら、窓ひらかずに起動できました。
ありがとうございました。
追加でお聞きしたいものなのですが、
このようにして起動した場合、タスクマネージャではプロセスruby.exeが載ってしまって、
他のRubyプロセスと区別がつかないのですが、区別を付くようにする方法ってないものでしょうか?
重いrubyアプリなどを動かした時に、redmineの方を間違って落としてしまわないかと心配です。
Ruby初心者スレの方で聞いたほうがいいのかな…。
>>137 ruby.exe を hoge.exe に別名でコピーして、
ruby script/server の代わりに、
hoge script/server とやる。
なんかダサイけど、これが一番手っ取り早い。
あるいは、Linux 版で mongrel 使っていると、
$RAILS_ROOT/log に mongrel.pid というファイルが出来るので、
その pid を kill すればいいけど、Windows でもそうなっていませんか?
139 :
136 :2009/05/25(月) 15:46:00 ID:???
>>138 ありがとうございます。
おお、ruby.exeは名前変えても動くんですね!
findしてみましたけど、mongrel.pidは見つかりませんでした。logにもなかた。windowsのせいかな…
exeの名前を変えると言われて気づいたのですが、タスクマネージャのメニューから「表示」「列の選択」から、
「コマンドライン」をチェックすると、プロセス起動時に渡した引数を見ることができました。
これで見分けがつきます!
これはVistaの機能だと思うのですが、Windows XPなら Process Explorerとかを使えば同じことができるはずです。
ありがとうございます。助かりました。
て今気づいたけど、
>>136-137 が実は解決していませんでした orz
窓がやはり出てしまいます。ショートカットのオプションで最小化していただけでした。
裏で動かすには、サービス化以外で何がいいんだろ…。
140 :
nobodyさん :2009/05/25(月) 15:48:11 ID:OXJaCHfT
railsを初めて触って動作を確かめています。
scaffoldでモデル(member)とビューを自動で作ったのですが、
気になる点があるので質問させてください。
以下のどちらのURLでもメンバーID=1番の情報を表示できるのですが、
これはどこで定義されているのでしょうか?(showが省略できる)
http://localhost:3000/members/show/1 http://localhost:3000/members/1 members_controller.rbもroutes.rbにも見当たりませんでした。
indexとshowは特殊なアクションでrails内部で既に定義されているという
ことなのでしょうか?
(railsのバージョンは2.3.2です。)
routes.rbの中にmap.resourcesってやつがあると思う。 そいつが指定されるとそうなる。
142 :
nobodyさん :2009/05/25(月) 15:58:47 ID:OXJaCHfT
>>141 すばやい返事ありがとうございます。
ちょっとmap.resourcesについて調べてみます。
144 :
138 :2009/05/25(月) 16:14:38 ID:???
145 :
136 :2009/05/25(月) 16:30:14 ID:???
>>139 > バッチファイルに、以下じゃダメかな?
> start ruby scrit/server
実は、
start /B ruby scrit/server
とか
cmd.exe /k start /B ruby scrit/server
とか色々試したのですが、うまくいかず、結局、wshのjscriptを使って起動させることにしました。
----------redmine_start.js-----------
shell = WScript.CreateObject("WScript.Shell");
shell.Run("ruby.exe script/server -e production -p 3500", 0);
----------------------------------
Runに 0 を指定するとウインドウを非表示で起動してくれるみたいです。
参考:
Run メソッド
http://msdn.microsoft.com/ja-jp/library/cc364421.aspx Windows Script Programming: バッチファイル、コンソールアプリなどを非表示で実行する。
http://scripting.cocolog-nifty.com/blog/2006/10/post_c77d.html 無事解決した模様です。ありがとうございました。
146 :
138 :2009/05/25(月) 16:33:13 ID:???
>>145 こちらこそ参考になりました。どうもありがとう
>>126 レスありがとう。まさにそんな感じだった。
バイナリデータが、一部がごそっと欠損するわけじゃなくて、
途中途中のデータが消えてスカスカになる感じ。
まさに、バイナリデータを文字として開いているような・・・。
結局、指摘の方法をやってみたけどもだめで、素直にlinuxでやることにした。
(やりかたが間違ってたら申し訳ない。)
しかし新たな問題が発生。。。
今error_message_forを使ってエラーメッセージをだしているのだけども、
attachment-fuのvalidates_as_attachmentをつかって検証すると、
添付ファイルが無いときに
Content type can't be blank
Size can't be blank
Size is not included in the list
Filename can't be blank
と上記のような、ユーザーには関係ない内部的なエラーが表示される…。
今は、controllerの添付ファイルアップロード用メソッドに、
添付ファイルがpostされなかったら@モデル名.erros.addに「添付ファイルが無い」旨の
エラーメッセージを詰めて、処理を中断するようにしてるけど・・・
このプラグイン使っている人は、ファイルが選択されずにpostされたときは 、
どこで検証して、メッセージを表示してるんだ?
149 :
138 :2009/05/25(月) 18:53:30 ID:???
>>148 >> hoge.exe を消すと ruby.exe も消されてしまわない?(WinXP)
>>
http://www.atmarkit.co.jp/fwin2k/win2ktips/982hardlink/hardlink.html >Explorerにそういうバグがあるの?
>リンク先にもそんな記述はないようだけど。
失礼、ジャクションと勘違いしていた。
>> いまやってみたら、消そうとしたら「アクセスが拒否されました」と言われて、そもそも
>> ハードリンクで作った hoge.exe が消せなくなった。
>そりゃhoge.exeが動いてるんじゃね?
こっちについては、hoge.exe は動いていなかったが、なぜかはわからん。
Who Lock Me で調べても出てこなかったが、ファイルサイズも小さいし気にしないことにする。
Drupalと連携できないのRoRは糞だダメだカスだ
>>126 報告ですが、linuxだとできますた。
自分は最近やっとこさVMとかlinuxとか動かせるようになったひよっこだが、
オープン系の人ってwindows嫌いなんだろうかw
オープンソースとオープン系は別物。 「オープン系」はメインフレームの一社でのまるごとシステム提供に 対してUNIXやWIndowsでいろいろなメーカーのを使うことを指す用語。 嫌いというか、 Windowsに興味がない人は多い。 UNIX畑の人が優勢な世界だしね。 MacはOSXになってUNIX寄り(定義上はUNIXそのもの)になったから まだましだが。
Windows使う奴はゆとりかマジ基地の2択
職場じゃWindowsしか使わせてもらえないんですけど 「Windowsしか使えない奴」なら同意してあげる
>>151 Windows嫌いというより、テキストモードが負の遺産というのはガチ
マクはUNIX系とは言いがたい。 sshで全部の設定が出来る訳じゃないし、鯖用途で使われてるのは、ほぼ皆無。 まだLinuxのほうがUNIXに操作方法が近い。 CUIとrubyみたいなスクリプト系の相性の良さは異常だしな。 GUIのためにスクリプトの手間が増えるのは萎える。
>>156 そのへんをふまえて「定義上は」と書いてある。
158 :
nobodyさん :2009/05/26(火) 11:29:07 ID:2daPE8kx
既存のテーブルbook, itemがあります。 主キーとしてそれぞれbookid, itemidが設定されています。 それぞれのモデルに set_table_name "book" set_primari_key "bookid" has_many :items set_table_name "item" set_primari_key "itemid" belongs_to :book を設定しています。 script/consoleを使用して以下のようにしています。 b = Book.find(1) b.items ですが、b.itemsの行で以下のようなエラーが出ます。 ActiveRecord::StatementInvalid: PGError: ERROR: column item.book_id does not exist itemテーブルのbook_idを探しているようなのですが、itemテーブルの外部キーはbookidなので エラーが出ているようです。 railsがbookidでitemテーブルを検索するようにするためにはどうしたらよいのでしょうか?
Railsをfastcgi等を使用してapacheで走らせたときに スクリプトへの変更はすぐに反映されますか?それともサーバの再起動が必要?
試してごらん
161 :
159 :2009/05/26(火) 19:04:33 ID:???
出来ないということですね ありがとうございます
railsは自動的に色々ソースを補助してくれているようだけど。 もし自分がはまったとき、 みんなソースをどうやって追いかけているの? 全部見ていく訳じゃないんでしょう?
言葉の勉強をしよう
PassengerならApache再起動なしでいけるけどな
>>158 foreign_keyオプションについて調べるんだ。
>>162 定義箇所をgrepで探す。
Railsはとくに動的に定義されるメソッドが多いからそれだけじゃ
どうにもならなくなるんだが。
その場合、method_missingあたりから追うことになるな。
エラーなら、とりあえずログに出てくるバックトレースを見る。
167 :
nobodyさん :2009/05/26(火) 22:41:14 ID:nc85Zu/k
Rails のアプリケーションは、
http://myhost/foo/ みたいに、ディレクトリを一段下げた状態で運用できますか?
たとえば /usr/local/foo 以下が RAILS_ROOT だとして、RAILS_ROOT で mongrel 等を使って
ruby script/server で起動すると、アプリの URL は
http://myhost/ 直下になりますよね。
開発環境では、これで開発しています。
本番環境が、Passenger を使って
http://myhost/foo/ 以下で運用することになりました。
Passenger 等を使うと、/*** はいくらでも httpd.conf で自由に定義できると思いますが、
アプリの view で image_tag("icon.png") とすると、
<img src="/images/icon.png">
とレンダリングされてしまい、/image ディレクトリは web サーバのトップにあることが前提となってしまいます。
Passenger 等で、
http://myhost/foo/ にアプリケーションを展開した場合、
image_tag("icon.png") は、
<img src="/foo/images/icon.png"> となってくれるのでしょうか?
※Java Servlet の HttpServletRequest#getContextPath() みたいなのを内部でやってくれるのかどうか
最近のPassengerはそこバグってるはず。 config/environments/production.rb config.action_controller.relative_url_root = '/foo' とかやったらどうなる?
169 :
167 :2009/05/26(火) 22:46:23 ID:???
>>168 早速レスどうもありがとうございます。
実はこれから Passenger をビルドしようとしているので、
まだ Passenger で動かしたことない。
というか image_tag() が出力する HTML タグは、
Passenger か mongrel/webrick かで、出力結果が変わるのですか?
170 :
158 :2009/05/26(火) 22:52:37 ID:2daPE8kx
set_table_name "book"
set_primari_key "bookid"
has_many :items, :foreign_key => :itemid
set_table_name "item"
set_primari_key "itemid"
belongs_to :book, :foreign_key => bookid
とすることでうまく動作するようになりました。
>>165 さんありがとうございました。
>>169 image_tagなんかの出力は actionpackのasset_tag_helperで定義
されているが、ActionController::Base.relative_url_root の値が
頭に付く。この値は環境変数でデフォルト値を変えられるので、
呼び出すプロセスが変更すればその影響を受ける。
Passengerがそこをどうしてるかは知らないけど。
サイトに時計を 「10時15分」 とか数字で表示させたい場合 どんな手法がいいですか? あと、一緒にカウントダウン表示も行いたいのですが。
基本的にJavaScriptかFlash 要件によるが というかRails関係ない
>>156 ,157
どのへんがsshで設定できないの?
175 :
127 :2009/05/27(水) 02:11:16 ID:jIlGcikV
>>128 むーんやはりそんな感じですか・・
ありがとうございましたm(_ _)m
176 :
167 :2009/05/27(水) 03:42:10 ID:???
>>168 >>171 レスどうもありがとうございます。
>>171 さんのそういう情報も聞きたかったでした!!
こちらの環境:
・CentOS 5.1
・Apache 2.2.3(httpd-2.2.3-22.el5.centos)
・ruby 1.8.5 (2006-08-25) [i386-linux]
# gem list
actionmailer (2.1.1)
actionpack (2.1.1)
activerecord (2.1.1)
activeresource (2.1.1)
activesupport (2.1.1)
cgi_multipart_eof_fix (2.5.0)
composite_primary_keys (1.0.10)
daemons (1.0.10)
dcov (0.2.2)
fastthread (1.0.7)
gem_plugin (0.2.3)
haml (2.0.9)
mongrel (1.1.5)
mysql (2.7)
passenger (2.2.2)
rack (0.9.1)
rails (2.1.1)
rake (0.8.4)
rcov (0.8.1.2.0)
rspec (1.1.12)
rspec-rails (1.1.12)
177 :
167 :2009/05/27(水) 03:43:18 ID:???
まず gem で Passenger をインストールし(上記のように、2.2.2 が入った)
http://redmine.jp/tech_note/apache-passenger/ にあるように
VirtualHost 形式でやってみたところ、Passenger で Rails アプリは動いた。
これは問題なし。
つぎに
http://rubyist.g.hatena.ne.jp/Ubuntu/20080729/1217336403 のように、
VirtualHost を使わず、
# ln -s /usr/local/foo/public /var/www/html/foo
として、httpd.conf に以下を追記した方式で、
RailsBaseURI /foo
Rails アプリを
http://myhost/foo/ でやってみた。結果としてうまく動いた。
アプリの view の中で image_tag("icon.png") とすると、
<img src="/foo/images/icon.png">
というように /foo が付加された。
また <%= @controller.request.relative_url_root %> とすると、
/foo が出力された。(*1)
ということで問題ないようです。
ちなみに
>>168 にあるように、 config/environments/production.rb に
config.action_controller.relative_url_root = '/foo'
は書いていません。
production.rb をいじらなくても目的は達成できたけど、以下を追試した。
178 :
167 :2009/05/27(水) 03:43:45 ID:???
○追試1:
production.rb に
>>168 を書いて Apache を再起動し、
http://myhost/foo にアクセスすると、
Rails アプリが立ち上がらない。Passenger の HTML が出て、
Ruby on Rails application could not be started
Error message:
undefined method `relative_url_root=' for ActionController::Base:Class
というのが出る。
もし書くとしたら、どう書くのが正しいのだろうか?
○追試2(
>>171 を見て):
(*1) の時、view で <%= @controller.request.relative_url_root %> の代わりに以下のように書くと、
<%= ActionController::Base.request.relative_url_root %>
以下のようなエラーになった。
ActionView::TemplateError (undefined method `request' for ActionController::Base:Class) on line #?? of index/index.html.erb:
これも同じ問題かな?
ちょいとFour Days on Railsなど読んでRailsを始めているものなのですが、 素朴な疑問なのですが、 通常データベースの最初の作成って、どんな風におこなっているもんなんでしょうか? rake db:create だと mysqlのroot ユーザみたいなあらかじめ権限あるユーザでないと作れないし、 というかdevelopmentとかtestはrootでも別にいいかって感じなんですけど(と、Railsによるアジャイル本P26にあった)、 productionの場合、さすがに root まんまってのも変だし… 結局、mysql コマンドでroot で create database 'my_project_production' default character set utf-8; grant all privileges on my_project_production.* to my_project@localhost identified by (パスワード) みたいにDB作ってユーザー作成ってことをするのも、他の開発者とか、テスト環境とかで 毎回やってたらあれなんで、テキストに書いて、 myslq -u root -p < create_db.sql みたいにやってもらう、ってことになるかと思うのですが、 その辺、スマートな方法ってないもんでしょうか?
unixの勉強してちゃんと権限設定すれば良いだけ。
は?
レンタルサーバーだから権限無い、どうしたらいいのって質問でしょw
いや違うだろw なぜunixの権限設定の話になるの?データベースユーザの話でしょ? ちなみにおれはマイグレーション機能を使っていない、 が元レスに対する回答かなあ
パッセンジャー2.2.1って不安定だな。バージョンあげれば安定するだろうか。 バージョンあげてもっとひどい目に遭いたくないから躊躇してしまう。
>>179 create database は、MySQL にログインして実行しているけど、
そこからさきのテーブルを作るところは、rake db:migrate でやっている。
>他の開発者とか、テスト環境とかで 毎回やってたらあれなんで、テキストに書いて、
別にあれというほどの作業でもないと思うが。
チームに人が増えたら、DB 担当者に「佐藤さんが今日から入ったので、satou スキーマを作ってあげてください」
でいいんじゃないの?
>>184 どう不安定なのか知りたい。
>>185 アパッチごと落ちるとかインターナルサーバーエラー。
落ちるのはやめてほしいが1日に1回くらいかな。
知りたいってことは安定してるの?
>>186 Passenger2.2.2使ってるけど、特にApacheが落ちるという事はないな。
環境が違えば、結果も変わると思うので、ここで聞いても仕方ないのでは?
テスト環境作って、そこで最新版のテストをしてみる事をお勧めします。
うちはさっぱり動かんわ。 sendmsg()がEBADFで失敗するところまでは追いかけたけど、なんで失敗するのか さっぱりわからん。
>>187 ふ〜む、サーバーのメモリが足りないのだろうか。
ちょっと開発環境でバージョンあげてテストしてみる。
mongrelの方がよかったかもと後悔中。
190 :
187 :2009/05/28(木) 00:12:48 ID:???
>>189 ところで、このあたりの値ってどうしてます?
PassengerMaxInstancesPerApp
PassengerMaxRequests
自分は今このくらいで動かしてる。
PassengerMaxInstancesPerApp 8
PassengerMaxRequests 15
ちなみにサーバのメモリは4GB。
以前、PassengerMaxRequestsを設定しなかったら
passenger-statusで表示される1個あたりのProcessedが500とかになってて大変な事になってた。
アクセスが多すぎてApacheが落ちる?という事があり得るなら
PassengerMaxInstancesPerAppとPassengerMaxRequestsを調整してみるといいかも。
確証はないけど。
>>190 ありがとう。
おれの方は個人、といっても趣味ではないんだけど、
VPS(メモリ200Mくらい)を使って立ち上げた卵サービス。
パラメータは、
PassengerMaxPoolSize 2
しか設定してない。
マニュアルを見ると「2」でも少しきついかもなんだけど。
アクセスは重なっても瞬間3リクエスト/秒くらいだから、
悔しいけどアクセス過多というのはあり得ないんだよね・・・orz
mongrelの方が消費するメモリが少ないみたいだから、
これくらいの小っちゃい規模ならmongrelの方がいいのかなと思った。
>>191 VPSのそのスペックで秒間3リクでrailsなら過多だぞ。
それがどれだけ続くのか言わないと
>>182 NO
>>183 そです。
>>185 うん、まあそんなもんかー。それくらい手間じゃなかろう、というスタンスですか
参考になりました。サンクス
linodeの再安プランを契約した。メモリ360MBで転送量200G。 passengerかmongrelか迷うな〜。 passengerはVMにいれて動くとこまで確認したけど、いいのか悪いのか わかんねー。
>>193 そもそも、開発者は production 運用時のパスワードとか知る必要はないんじゃね。
ウチはそこんとこ、deployスクリプトでよろしくやってる。
>>190 のレスをみて、passenger-status というコマンドを初めて知った。
Processed とはどういう意味でしょうか?
こちらでは、開発チーム4人、テスト環境で passenger を使っていて、ホストしている web アプリは1つ、という状況。
ラッシュテストではなく、make/UT フェーズの後で、ブラウザをぽちぽち触っている程度。
あと httpd.conf では、おきまりの追記する 3行と、RailsBaseURI /foo しか定義していない。
----------- Domains -----------
/home/******/rails:
PID: 10322 Sessions: 0 Processed: 111 Uptime: 23m 26s
PID: 15097 Sessions: 0 Processed: 80 Uptime: 7m 33s
Core2Duo E8400、メモリ3GB、CentOS 5.1(32bit)です。
>>192 あ、すまん。もう少し詳細に。
まず、負荷を抑えるために静的ファイルにできるものは全部静的にしてるから、
そのアクセスすべてがRailsのコントローラーを通るわけじゃない作り。
Railsのコントローラーを通るリクエストは全体のうち10〜20%くらい。
瞬間3リクエスト/秒というのは1日1回あれば上等で、1日平均2000〜4000リクエストくらい。
1つ上のプランにしようか検討中(メモリが倍くらいになる)。
>>196 1つのRailsインスタンスが処理しているプロセス数だと認識している。
初期値では無制限になっているから負荷が高い時は
PassengerMaxRequests 50
など少ない数値を指定すると良いかも。
こうすると、各インスタンスのProcessedの値が最大50に制限される。
みんなsqlとかページに対して、キャッシュ使ってる? 俺はとりあえずキャッシュとか一切考えないで作って、 支障でてきたらメンテナンスしようかなってくらいなんだが・・・ 結構しんどそう。
問題が出てから対応したらいいと思うよ
Premature optimization is considered harmful.
ためしに主要コンテンツにキャッシュ使うようにしてみたら、かなり早くなったw
203 :
nobodyさん :2009/05/29(金) 03:17:14 ID:2GV35QJ0
AWDRのThird Editionを見ているのですが、 外部キーの定義にt.references :userを使わずt.integer :user_idを使っています。 なぜなんでしょうか?
>>203 それは好みの問題なんじゃないの?
どっちを書いても結果は同じ事になるからね。
render :update で行う処理をヘルパで定義したんだが、 ヘルパで定義したメソッドから、別のヘルパに定義されているメソッドを呼び出そうとしたら 上手く呼び出せないんだ なぜかActionView::Helpers::JavaScriptProxy のインスタンスが帰ってくる どうすればいい?
どう書いてるのかも分からないのに・・・
Ruby会議行く人いるー?
チケット買えたら行く。 去年は会場が広かったせいかわりと余裕があったが今年はどうだろうね。
wycatsのセッションが楽しみだ
ruby会議というのに行ってみようと思う ruby 歴2ヶ月のものですが、 チケットは瞬殺してしまうものなのでしょうか?
セッションスピーカーに「坂本龍一」って人がいるんだけど、 映画ラストエンペラーでアカデミー音楽賞とった人?
2006、2007年はそこそこ瞬殺(数時間)、2008年は会場が広いのと 東京から遠かったせいか、もっとゆっくりだったと思う。
railsでGMAILをsmtpサーバーにしてるひといる? アクティベーション用につかってたんだけど、とづぜんおくれなくなった。 気になるのは、GMAILにログインして送信済みトレイをみるとそのメールは 送ったことになってる。 なお普通にメールは送れる。 なんか同じような手形式のメールばっかりやってたから、迷惑メールのサーバーとして 利用してると勘違いされて、ブロックかけられてるような気がするのだが・・・。
gmailは送信数制限があったと思うが
>>215 マジか・・・。
素直にメールサーバ立てるかあ。
無料の Gmail の SMTP は上限500だったっけ。 Google Apps の Gmail は2,500だったような気がする。 Gmail アカウントを10コ取得、アカウントをランダムで 回してメール送信すれば OK。
218 :
113 :2009/06/02(火) 12:05:26 ID:???
すみません、質問させてください。 production環境でもdevelopment環境みたいに エラーが発生した時に詳細を出したいんですがどこで設定したらいいですか? また、Controllerのメソッドを特定のアドレスからのみ実行させたいんですが、 これってrailsの設定でできます? (ENV['REMOTE_HOST']を取得して分岐させた方が早いですか?)
>>218 grep consider_all_requests_local config/environments/*.rb
いまどきのデプロイって何使うのがいいんでしょ。capistranoでいいのかな? 作者メンテ終了ってきいて不安…
作者のメンテがなくなって困るのってどんなときかなぁ ある程度使っている人がいるだろうから なにかあってもなんとかなりそうじゃね?
<div style="width: 100px; border: 1px solid black;"> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa </div> で、firefoxだとdivの枠線を突き抜けてしまう現象についてなんだが・・・。 今はrubyで<wbr/>タグを文字と文字の間にはさみこんで対処してるんだが・・・ これってみんなどうしてんの? 転送量増えるし、出来ればこの方法はとりたくないなぁ。
overflow:auto;
そもそもオープンソフトでサポートは期待出来ないしな。 さっくり商用ソフト使ってサポート契約しておくのが安心。
なんでいきなりそんなことを言い出すんだw
あぁ・・・save!するよsave!・・・ びぎんっ!れすきゅー!
少し、Capistranoについてお聞きいたします。 svnなどのバージョン管理ツール経由でデプロイする場合は、 リポジトリサーバーを公開しておく(デプロイ先からアクセス可にしておく)必要があるわけでしょうか? リポジトリが公開サーバーからアクセスできない(例えばローカルネットワークやファイヤーウォール内にあるなど) 場合は、どうしたものでしょうか? また、svn等SCM経由でデプロイする利点というのは何があるのでしょうか?
この辺でググるヨシ。 set :deploy_via, :copy set :copy_remote_dir, "/tmp/tmp2"
どうしてネット上では左翼(左派)の方が叩かれやすいのだろう。 ルーツはネットの掲示板が普段言えないこと=反良識だったところだろうね。 で、良識と左派思想に近いものがあったのが原因かと。 多分今のネットの言論の遡った先って、大昔のあめぞうとかUG系の掲示板で話されてた 中二病的な会話だったと思う。 「うぜえ、氏ね」とか「ハッキングが問題なんじゃねえ、ちょっとつついたら入られる くらいセキュリティもちゃんとせずにネットやるほうが悪いんだよ」とか「殴られても やりかえすな、ヘラヘラしてろってかw」みたいな。 表によろしい発言かというとそうじゃないけど、まあちょっと良識に反発しようと 思って考えずに口にだす暴論、みたいな。 それが2chになって、2chが巨大化して一般人も流入して、セコウ工作が……となっていくうちに 「ヘイトスピーチ」「自己責任」「9条破棄」と変質していったと。 でも確かにほんとうざいな、右翼コメ。 雑談スレで何かっつーとそういうネタ持ってくる人とかもうね。
>>230 set :gateway とかいう設定も使えそうな薬缶。
マイグレーション、ちゃんと設定すると結構便利だな。
Model の validation を呼び出し元 action によって切り替える、といった事ってみんなどうやってやってる? :if とか :unless とか上手く使えばスマートに書けるのだろうか・・・。 それとも Model 内で 呼び出し元の action 取得できるような機能ってあったりする??
>>235 どこでそんなのが必要になるのかさっぱりわからんが、
新規作成時と既存レコードの更新時で変えたいなら方法はある。
237 :
230 :2009/06/05(金) 04:52:19 ID:???
>>235 なんか意味が分からない。
validate_on_create、validate_on_update、validate
をモデルに定義するだけじゃ足りないの?
239 :
235 :2009/06/05(金) 08:46:49 ID:???
ウィザードだったら、 bodyが2画面目で入力されるとして、 class Entry < ActiveRecord::Base validates_length_of :body, :if => :_body_required? def _body_required? !!self.body end end みたいに普通にやれば良いだけじゃないの? 1画面目ではvaildation走らない。
ウィザード形式の入力画面って、たとえば最初に男か女か入力したとすると、 その値によって入力する内容が変わったりするってことか? どういうものかイメージがわかないのだが、複数の画面で登録するってことは、 1つのテーブルにまとめてること自体がおかしいというわけではないの?
インターフェイスの都合をデータに持ち込んでいる時点で好ましくないと思う。 自分なら、モデルではなく、バラのセッションデータとして属性値を持ち回って、 ウィザードの最後でモデルを作るという形にすると思う。
いや、セッションで持ち回るのは当たり前だけど validationをどうするかって話でしょ。 ウィザードの最後でvalidationするの?
途中のページでも全部のバリデーション走らせてそのページで必要なバリデーション結果だけ見るってのはどうたい。
245 :
235 :2009/06/06(土) 00:39:58 ID:???
>>240-244 みんないろいろなレスありがとう。
とても参考になります。
>>240 確かにシンプルでいいんだけど、最終的に body が必須(validates_presence_of)の場合だと駄目だよね?
実際ちょっと困ったのが、後の画面では必須なのに前段階の画面には入力欄の無いパターンなんだ。
>>241 選択によって入力させる内容が変わるというよりは、入力項目が多い画面なんかで、「次のステップ」みたいに画面分割された感じ。
テーブル設計のミス、と言われればそれまでなんだけど、画面が開発後半になって分割されたりしたから、タイミング的にテーブルを分けるのは難しいんだ・・・。
>>242 確かに良くないとは思う。
ただその方法だと
>>243 の指摘の通りで、入力画面が分かれてるから、最期にまとめて実行すると一部の項目が入力欄がないのにエラーメッセージが出てる状態になっちゃうんだよね・・・。
>>244 それって
ttp://blog.masuidrive.jp/index.php/2008/02/23/rails_valid_columns/# ここの人がやってた validatoin 一旦走らせて、不要な項目のエラーを errors から取り除く、ってことかな??
確かにこの方法使うとコード自体はすっきりしそうなんだけど、毎回全部の validation が一度は実行される、ってのは微妙な気がしてる。
例えば Java の Struts なんかだと ValidatorActionForm みたいに、同じ ActionForm でも パス毎に異なる検証ルールを適用できるよね?
そういう方法が Rails にも用意されているのかと思ったんだけど・・・。
そういう事やるためのプラグインとかってあったりする?
入力ページA ↓(valid_for_B?) 入力ページB ↓(valid_for_C?) 入力ページC ↓(valid?) 確認 ↓(valid?) 完了 って感じで遷移するんだよね、きっと。 controllerのprivateにでもvalid_for_XX?みたいなのを作ってしまえばどうでしょう。 遷移の都合なんだから直書きでもいいかもしれない。 def valid_for_B?(record) record.valid? return !(errors.on(:body) || errors.on(:title)) end 昔validate_attributesってプラグインを使ったことがある。 validateするカラムをonly/exceptで指定できる。 検索してどこのリポジトリのが使えそうかおしえてちょ。 最近はgithubでforkされまくるからどこのが良さそうか迷うわな。
247 :
235 :2009/06/06(土) 02:00:03 ID:???
>>247 NetBeans 6.5でRailsアプリケーションのテスト駆動開発を:企業IT部門の変革を支援するエンタープライズ実践情報サイト EnterpriseZine
http://enterprisezine.jp/article/detail/910?p=3 NetBeans 6.5でRailsアプリケーションのテスト駆動開発を:企業IT部門の変革を支援するエンタープライズ実践情報サイト EnterpriseZine
http://enterprisezine.jp/article/detail/910?p=4 Productクラスにフィールドの値を検証するコードを追加しています。
Productクラスにインスタンスメソッドvalidateメソッドを実装すると、saveメソッドの直前に実行されます。validateメソッドの中で、
不正な値を見つけ出したら、errorsオブジェクトのaddメソッドを使って、エラーを登録します。このメソッドは第1引数にフィールドの名前、第2引数にエラーメッセージを取ります。
1行目と2行目は、test_should_create_productとほぼ同じですので、3行目から見ていきましょう。
assert p.errors.invalid?(:price)
priceフィールドでエラーが生じていることを確認しています。これは一種のイディオムとして覚えてください。
Capistranoの質問させてください。 cap deploy:setupが無事に終わり、cap deploy:cold しようとするのですが、 リポジトリからチェックアウト時にこけてしまいます。 config/deploy.rbは set :repository, "svn+ssh://my_server/my_program/trunk" set :deploy_to, "/home/www/#{application}" set :deploy_via, :copy みたいにしてあるのですが、 ローカルでの実行結果を見ると、 svn checkout -q -r13 "svn+ssh:\\my_server\my_program\trunk" c:\cygwin\tmp になってて、権限がない、とかでエラーになってました。 試しに svn checkout -q -r13 "svn+ssh://my_server/my_program/trunk" c:\cygwin\tmp とすると問題なく実行されました。 svnに渡されるパス区切りが何故かバックスラッシュになっているみたいです。 (すいません、細かいログはちょっと忘れました。後でまた書きます) Windowsのせいなのかな… 環境 ・Windows XP SP3 ・cygwin + ssh + ssh_agent ・svn, バージョン 1.5.3 (r33570) plink.exeとpageantでssh鍵接続
AptenaよりもNetBeansのほうが使いやすい。 比較的日本語のせつめいもあるからね
heroku 以外に無料の Rails ホスティングありませんか
自鯖は無料じゃない
254 :
251 :2009/06/08(月) 11:27:36 ID:???
やっぱりないんですかね。。。 252 的なつまらん回答としては xrea に Rails や、GAE を JRuby on Rails とかかなぁ。
rake db:migrate すると can't activate gettext (= 1.93.0, runtime) for [], already activated gettext-2.0.4 for [] と出ます。gettext は 1.93.0 と 2.0.4 が入っています。 エラーメッセージから推察するに 1.93.0 を指定する必要がありそうな感じなのですが、 どうしたらいいでしょうか。
>>255 gettextはもう使わないようにする。
252=256
>>251 herokuって無料ベータ終わったんじゃなかったけ?
クラウド系で1つだけなら無料のところあった気がする
260 :
251 :2009/06/08(月) 14:57:16 ID:???
262 :
249 :2009/06/08(月) 15:59:55 ID:???
Capistrano(ver 2.5.5)のソース読んでみています。 謎をとくべく、リポジトリのパスが何故バックスラッシュが円記号になってしまうのか、該当箇所が見つからず困ってます…。 リポジトリのパスが lib/capistrano/recipes/deploy/scm/base.rb の repositoryメソッドで repositoryという設定から読まれていて、 cap deploy:coldによって、 lib/capistrano/recipes/deploy/strategy/base.rb の Capistrano::Deploy::Strategy.deploy! から、 lib/capistrano/recipes/deploy/scm/subversion.rb の checkout でrepositoryメソッドが呼ばれているまではわかりました。 円記号への変換ルーチンが見つからないよヽ(`Д´)ノ ウワァァン!!
263 :
249 :2009/06/08(月) 16:31:58 ID:???
attachment_fuで、storageをfile_systemにしてるんだけど、 これってファイルを更新したくなったらどうするんですか? ユーザ1人1人に顔アイコンをuploadできるような仕組みを考えてて、 userモデルはphotoモデルをbelongs_toしてる。 photoモデルはhas_attachmentして、uploadされたデータをファイルとして保存してる。 こんな感じで保存してるんだけど @photo = Photo.new(params[:uploaded_data])#ファイルフィールドからのポスト含む @photo.save User.update(ユーザID, [{:photo_id => @photo.id}] これで新しい画像をアップロードしたときどうすればいいんだろうか・・・と悩んでいるのだけれど・・・。 User.photo.destroy if User.photo @photo = Photo.new(params[:uploaded_data]) @photo.save User.update(ユーザID, [{:photo_id => @photo.id}] こうすればいけるのはわかるのだけど、 @photo = Photo.find(params[:id]) @photo.update_attributes(params[:photo]) こういう風に更新するのが正しいような気がするのですが・・・
NetBeansでrails触っているのですが、 全体像がつかめません。 どうしたら、どのファイルが必要であるかわかったり、 ファイルごとの関連性がわかるなど 全体像をつかむことが出来ますか?
>>265 I/O BOOKSの「はじめてのRuby on rails2」がおすすめ。
慣れるとまったく読むことの無い本になるけど、
非常に簡単に説明してくれるので、まずつまづくこと無くサンプルアプリが組めるはず。
学習の最初に火種にいい本だと思ってる。
他はレシピブックが個人的には神だった。
Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。
> Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。 今まさにこれで勉強してる訳だが(´;∀;)
駄目な本で勉強してるおまえは駄目駄目とい・・・ あ、すまん。つい
>>267 ごめん、「駄目」って言い方悪かった。
最初にその本から始めたんだけど、俺の頭が悪くて理解不能だった。
「はじめてのRuby on rails2」は、相当ハードル下げてくれてるから
(その分進みが遅くて内容が薄い)、俺でも理解できた。
> Ruby on rails Webアプリケーションスーパーサンプル
は、バージョンが1.3なのがマイナスだけど、ある程度理解した状態で読んだら
普通にいい本だったよ。
attachment_fu参考文献すくないorz has_attachment :content_type => :image, :storage => :file_system, validates_as_attachment モデルにこの設定でも、exeとかdllとかでもupできてしまう・・・ has_attachment :content_type => :image, :storage => :file_system, :path_prefix=>"public/image/d/", :max_size => 3000.kilobytes, :resize_to => '130x100' validates_as_attachment この設定でなんでもuploadできるし、3M超えても普通にアップロードできる・・・。 :storage => :file_systemだから?。。。 自分でファイルサイズとかのvalidate作らないとだめなんでしょうか。 他にいい画像アップロードのプラグインないでしょうか。
>>270 やりたい事がアップロードできるファイルの種類の制限(画像のみ)やファイルサイズ
だけなら、簡単そうだからプラグインのソースを直接修正すればいいと思うよ。
画像アップロードといえば、paperclipがやたら人気だが
別にプラグインのソース直すことは無いと思うけど。 一回アップロードされるのはRailsのプラグインだと、 いまのところ仕方ないこと。 アップロード後にvalidationかけてはじく。 仕事で使うとどうしても確認画面入ってくるから、 そういう場合はいまだfile_column一択になってしまう。
>>273 仕事で Rails 使っている人発見!
入力→確認→登録の流れをどう実装していますか。
登録画面にも確認画面を表示しているならその方法や、
確認→登録の hidden は何か特別なこととかしてるかとか。
>>274 確認画面JavaScriptでやれとかいう人もいるけど、
ちゃんと画面つくってる。
無理にRESTにこだわる必要なし。
JavaScriptでやると、登録まできちんとしたvalidationできないし。
値はsessionで持ち回し。まぁ、他の言語でも普通な方法。
hiddenだと、確認→登録の時にもvalidationしなきゃいけないので。
276 :
274 :2009/06/10(水) 12:49:12 ID:???
>>275 なるほど。session ですか。便利ですものね。
ありがとうございます。
>>271 どうもです。
↓とりあえずこれでファイルの種類特定するようにしますた。
validates_inclusion_of :content_type, :in => ["image/pjpeg", "image/jpeg", "image/gif", "image/png"]
ファイルサイズもsave前に取れる(windowsだと取れません。)のでこれでいこうかとおもってる。
しかし、windowsだとアップロードファイルのsize取れなくて、わざわざlinuxでテストしないといけない・・・。
こういうの続くと、開発環境をlinuxしたいな〜って思うようになってきたんですが、
慣れればwindows並の作業効率出せるもんなんでしょうか。
今のwin環境は秀丸+grepツール+windows付属品。
確認→登録の時にも勝手にバリデーションされるじゃん? なんか違う意味でのバリデーションなんだろうか。
確認と登録に同じバリデーションを通るような処理を書くの面倒だから、 入力→確認→登録、というテンプレートないものかな。
仕事って言っても社内業務系は基本的に必要ないだろ。 ネット系なら確認画面は必須だが。
>>278 入力→確認 のときにvalidationかけてセッションに入れる。
エラーが出たら、入力に戻す。
確認→登録 のときは、すでにvalidationが通ってるから大丈夫。
登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
同じバリデーしょんっつてもvalid?呼ぶだけでしょ? まあ、そう単純じゃない場合も良くあるんだよねえ。 すると、テンプレにしてもプラグインにしてもすべてのケースを網羅 できそうもないわけですね。 > 登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。 redirect_toするだけじゃないの?
>>282 入力→確認→登録(エラー)→入力
よりは、
入力→確認(エラー)→入力
の方が、余計な確認画面とおらなくて良いって話でしょ。
入力画面と確認画面は if で分ける感じ?こんな感じで。 <% if 入力画面 %> <%= f.text_field :foor %> <% else %> <%= params[:foo] %> <% end %>
入力画面と確認画面は、別アクション。 当然、テンプレートも別。 デザインも別で上がって来るし、別の方が楽。
別に分けると楽なんだけど、項目の変更が入ると 入力と確認に手を入れないといけないのが DRY じゃなくて何か嫌。 YAML からでも入力と確認画面を自動生成する仕組みがあるといいのだけど。
仮にYAMLで自動になってても、デザインまでは直してくれない。 結局は手動で直すしか…。 仕事でやってると、デザイナの上げてきたデザインはめるのが辛い。
テンプレートはcssセレクタで指定して内容変えたり表示非表示したいよな。 あとサーバ不要でpartialできる仕組みを各ブラウザに持たせてデザイナの 成果物をそのまま使えるようにできないものだろうか。 <include partial="./footer.html" /> それか、Rails実行環境とSVNクライアントを ブラウザのプラグインレベルで提供。でざいなさんもerbやってもらう。
デザイナーにソースを埋め込んでもらえばいいじゃん そんなに複雑なロジックをテンプレートに埋め込んでるの?
うちはデザイナにerb教えてみたけど、ほとんどに人が扱えなかった。 Railsだとフォーム関連のタグが全部ヘルパになってるし、 タグにclass一個付けるにも引数にしなきゃいけないので その辺でダメだったみたい。 他にも便利な独自ヘルパ作ってる場合(ビューの一部がヘルパに行ってる)や、 Ajaxでコントローラ内にRJSを入れていて、 そこにHTMLが入って来たりすることもある。 別にテンプレートにロジックが入ってる訳じゃなくても デザイナには難しいみたいよ。
デザイナには erb 難しいね。 あと、たとえやってくれても、 erb のタグとか消してしまっていて、 確認をしないといけないから 開発者の手間があんまり変わらないし。
292 :
267 :2009/06/11(木) 19:47:21 ID:???
件の本読んでたらscaffoldが完了しないわ動作確認でRutingErrorになるわで 悩んでたんだけど2.0から変わってたのね・・・情報古いわ・・・
DHHはデザイナもerbやれって言ってたようなきがする。
ところで、RESTfulな編集系actionって
http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions によると
new/create
edit/update
destroy
だけど、
確認画面が必要となると
new_1
new_2
new_confirm
new_commit
edit_1
edit_2
edit_confirm
edit_commit
delete_confirm
delete_commit
とかしたくなりませんか?
new
new_confirm
create
がいいのかなあ。
皆様どうしてますか?
デザイナは馬鹿だしな。 DWで対応してるPHPのほうが、まだ抵抗が少ない。 いまやHTMLと画像が用意出来れば十分な時代でもないのに。
>>294 デザイナーはバカじゃないだろ…。
役割を考えろ。
このバカとか思って教えても伝わらないよ 相手が理解できないならまず自分の教え方に問題がないか振り返らないと 代入のやり方とヘルパーの機能をまとめたものを渡せばある程度なんとかなるんじゃないだろうか あとは分岐と繰り返しだけど、繰り返しは自動生成されるやつそのままでいけるだろうし 分岐も何回かやれば、簡単なIF文は身につくような まあ、デザイナーに教えたことないから完全に脳内シミュレーションで 実際はイライラするのかもしれないけど
Smarty分かる人でもRailsのerbは無理だったよ。
>>290 みたいにデザインすべき要素があちこちに分散していて
全体の把握がしずらいみたい。
開発側でデザインはめて、はめた後のものを少し修正ならできた。
あと開発側としても、デザイナにerb触らせて動かなくなったりするのが
怖いというのがある。
>>297 ほんとに。Smartyわかってもダメなのか。
ヘルパーって調べるのとか結構時間がかかって
面倒とか思ってるのはおれだけだろうか。
でもあると使いたくなるし、後で使ってないところを見つけると直したくなる。
いっそごそっとなくなってくれれば楽なのかもとたまに思う。
相当役に立つやつは残してほしいが。
>>281 セッションにいれるのはparamsかな。
cookie storeだとあまり大きいのははいらないだよね?
そもそも論理的思考が皆無。 HTMLのタグとかも理解せずにDW弄ってる奴らだし。 ちゃんとALTタグ設定してるの見た事無い。orz
じゃあ、お前は彼らと同じようにデザインが出来るのか?
>>300 うちはactive record storeが多い。
cookie storeにした事はほとんどないかも
304 :
nobodyさん :2009/06/13(土) 21:38:32 ID:eLQY8eGW
Stringを拡張しようとおもうだけど、railsだとどこに書くのが適切?
拡張を定義したファイルを置く位置? lib/string_ext.rb かな。
lib以下でもいいし、こんな感じでプラグインにしてもいいかも。 vendor/plugins/string_ext/init.rb → (require 'string_ext'って書くだけ vendor/plugins/string_ext/lib/string_ext.rb → Stringの拡張処理
config/initializers/に置くと自動的に読み込まれるけど、 「初期化」じゃないからきっと行儀が悪い気がする。
>>307 おれならたぶんそこに置く。というか実際置いてる。
使うときに何の宣言もいらないし。
初期化って「本処理が始まる前にやっておくべきもの」だから、
それほど行儀が悪いということはないんじゃないだろうか。
3.0の正式版はまだか〜? はやくしてくれ〜
>>310 なんで?6月リリースを目指すってどこかで読んだ気がするけど
せっかく Rails 2.1.1 覚えたのに、 3.0 系列になったら、またごっそり変わるのか・・・・
>>304-308 自分は、config/environment.rb に、
class << String
〜
end
みたいに再定義していたんだけど、この方法はお行儀悪いでしょうか?
Merbから高速化のノウハウを吸収するらしいじゃん。 おれは歓迎だけど。ただ1.9.1が出て少したったし、 Railsも3で少し落ち着いてほしいな。もうかなり充実してるし。
>>313 environmentの意味を考えれば、
行儀が悪いというよりやってはいけないんじゃないだろうか。
それだったら最初に読むファイルは1個でいいように思う。
>>263 Capistranoのwin32での円記号が置換される問題ですが
結局、以下のようにパッチあてました。(全角空白を半角空白に置換してください)
--- base.org.rb 2009-06-08 17:12:53.187500000 +0900
+++ base.rb 2009-06-08 17:13:44.515625000 +0900
@@ -50,7 +50,12 @@
def system(*args)
cmd = args.join(' ')
if RUBY_PLATFORM =~ /win32/
- cmd.gsub!('/','\\') # Replace / with \\
+ parts = cmd.split(' ')
+ parts.collect! do |part|
+ part.gsub!('/','\\') unless /\/\// =~ part # if the string has // is probably a url, don't change.
+ part
+ end
+ cmd = parts.join(' ')
cmd.gsub!(/^cd /,'cd /D ') # Replace cd with cd /D
cmd.gsub!(/&& cd /,'&& cd /D ') # Replace cd with cd /D
logger.trace "executing locally: #{cmd}"
余裕があったら、githubでリクエストしとけばいいのかな…。
つかCapistranon メインの開発リポジトリってどこなんでしょ?たぶんgithubのどこかだとは思うのですが…
Capistranoで標準入力扱うにはどうしたらよいものでしょうか? 複数行のmysqlコマンドを実行したいものなのですが… とりあえず、思いついたのは、ファイルにいったん出力する方法です。 sql = <<- (sqlいろいろ) EOF put sql, "#{shared_path}/db/tmp.sql" run "mysql hage_db -u hoge -p unkopass << #{shared_path}/db/tmp.sql" 見たいにする方法です。 しかし、何かスマートじゃないような…。 もっとスマートな方法はないものでしょうか?
320 :
319 :2009/06/16(火) 07:26:15 ID:???
>>319 ごめんなさい。
x run "mysql hage_db -u hoge -p unkopass << #{shared_path}/db/tmp.sql"
o run "mysql hage_db -u hoge -p unkopass < #{shared_path}/db/tmp.sql"
でした。
よく考えたら、<<で後ろに文字列つければいけるのかな…
>>315 どうひどいのかその資料からじゃさっぱり分からんな
資料というかメモ書きみたいな感じだが
>>318 なんでわざわざくっつけてからまた分解してまたまたくっつけ直すんだよ。
今はじめてJSONを使った。 こんなに便利だとは・・・。 今までajaxやるときは鯖からxml返して、ブラウザ側でxmlをパースしてたよ・・・。
>>323 今はいろんな言語で JSON を扱えるから、
サーバサイドの言語が変わっても移行しやすいだろうね。
serializeなカラムの生なYAMLテキストを得るのに *_before_type_castを使うとデシリアライズされているかどうかによって 動作が変わってしまうのが気持ち悪いです。 Loading development environment (Rails 2.3.2) >> User.create(:data=>{:a=>1}); u=User.last; u.data_before_type_cast.class => String >> User.create(:data=>{:a=>1}); u=User.last; u.data; u.data_before_type_cast.class => Hash シリアライズ後のサイズを見たいのです。
> サーバサイドの言語が変わっても移行しやすいだろうね。 マイクロソフト涙目w
327 :
319 :2009/06/16(火) 19:25:39 ID:???
Capistranoでの標準入力の渡し方ですが、 runメソッドの2番目の引数のハッシュで :data で指定してやればいいみたいでした。 ソースのドキュメントに記述がありました。 ( lib/capistrano/configuration/actions/invocation.rb の Capistrano::Configuration::Actions::Invocation.run) task :hello do s = <<-EOF show databases; exit EOF run "mysql -u root -pfuckmyhead", :data => s do |ch, stream, out| STDOUT.print out STDOUT.flush end end
>>328 capistrano は使ったことがないので知らないが、
生(?)で Passenger を使っている。
ソースを更新したとき、Passenger は、Apache の再起動はいらないけど、
RAILS_ROOT/tmp/restart.txt を touch してタイムスタンプを変えておく。
すると、次回の http request 時に、ソースを再読み込みする。
>>328 のページを斜め読みしたけど、なかで touch tmp/restart.txt をやっているようだけど?
>>325 unserializeを通ると@attributesの中身自体が差し替えられてしまう。
で、読み取り系はことごとくunserialzieを通ってしまう。
そうなる前に
u.instance_variable_get(:@attributes)[:data]
でどうか。
行儀よくないけど。
capistranoとかでデプロイする時 バックアップとかも同時に出来るの?
デフォルトのdeployだと、リリースごとにrelease/タイムスタンプ というディレクトリに配置され、currentという名前で最新バージョンに シンボリックリンクが張られる。 で、rollbackというタスクで前のバージョンに戻せる。 まー、これで不足ならタスク書けばだいたいのことはできるよ。
>>329 「再起動はいらない」ってapacheの再起動のことなんですね。
Passengerは touch tmp/restart.txt で再起動させるようにしてみます。
a というテーブルに b.id 用の FK である a.b_id を追加しようと思っています。 ruby script/generate migration AddAsToBsId b_id:text すると、rake db:migrate で bs_id というテーブルに追加しようとします。 どのように書けばいいでしょうか。
335 :
334 :2009/06/17(水) 16:53:33 ID:???
自己解決しました。 ruby script/generate migration AddBsIdToAs b_id:text と書くべきでした。
下記エラーが出るのは scaffold でテーブル名を複数形にすると発生するのですよね? You have a nil object when you didn't expect it! You might have expected an instance of ActiveRecord::Base. The error occurred while evaluating nil.[] テーブルを削除せず、うまくやる方法はないものでしょうか。
Railsというのはruby以外のほかの言語も同時に使えるのでしょうか? WEBアプリケーションの開発を楽にしてくれるだけで 基本的にRubyなんですか? rubyに出来ないことはRailsにも出来ないということでしょうか? Railsはjavascriptとかajaxとか ウェブアプリを開発する上で rubyとほかの言語も一緒に書くように出来るプラットフォームみたいな物なのでしょうか? rubyという言語がjavascriptとかの言語も一緒に使える物なのか? それとも railsがほかの言語も使えるようにプラットフォームが整備されている物なのか どうなんでしょうか?
学校の宿題なら宿題スレにいけ
JavaScript を調べるとスッキリするだろうね
先輩方に質問です! 関連するモデルが存在する場合に、モデルの削除を禁止したのですが何か方法はありますか? 例えば、自分のモデルのデータを削除したい時、関連相手が自分に対してbelongs_toしている場合は 削除できないようにしたいのです。
アプリで制御したいのかDBの制約でいいのかわからんな DBの制約でいいならDBMSを追記・・・というかDBスレへ アプリの制御なら普通にIFじゃダメなのか?
342 :
nobodyさん :2009/06/18(木) 17:02:39 ID:ZZEBh1dd
作ったアプリを海外VPSで動かしはじめて2ヶ月くらい。 システムを更新するたびに、面倒くさい思いをするんだけど、みんなどう更新してるの? 俺は今FTPサーバを構築して、サーバのファイルをそのまま上書きuploadしてるw そしてapache再起動(passengerです。) tracとかsvn使ったことないんだけど、ブラウザ上でソース変更して、保存してapache再起動したら OK!みたいなことできるんだろうか。
>> 341 ActiveRecordの機能としてあるかどうか知りたかったんです。 削除対象のオブジェクトに関連しているモデルの存在チェックを行ってから 何も無ければ削除するようにしたいんです。
サイトごとに異なる設定はどこに書けばよいのですか。 ffmpegを使いたいのですが、ffmpegのパスを定数として MyFfmpeg::BIN = '/usr/local/bin/ffmpeg' このように設定したいのです。 これをどのファイルに書けばいいのですか。 initializers の下に ffmpeg_helper.rb を作ってそこに書いてみたのですが test のときはいいのですが development ではロードされませんでした。
>>343 ググってみた。
Railsアプリケーションをデプロイしようとするとさまざまな問題が生じるため、
Railsアプリケーションの開発は好きだけれどもデプロイは嫌いという技術者は少なくありません。
本書はアプリケーションのデプロイ時に技術者が直面するさまざまな問題の解決策を体系的にまとめた
Railsデプロイガイドです。
本書ではまずRailsアプリケーションのデプロイを家探しにたとえて解説します。
そして、一連のデプロイ処理の中で、Railsアプリケーションのホスティング方式の選択、デプロイの自動化、
サーバ管理、クラスタリング手法といった高度なトピックについて詳しく解説します。
3000円。
欲しいな〜これ。でもデプロイに1冊の本はやや大げさなきもするなぁ。
Table.create data みたいに一行 insert したら、 その行の id を取得するにはどうしたらいいでしょうか?
>>344 has_many と belongs_to が適切に設定されていれば、
categories(1) - items(N)だとすると
category.itemsでモデルの配列を取得できるはずだけど
itemsがあまりにも膨大なレコードの場合は気をつけてね
has_many の before_removeと組み合わせるといいのかも
と思ったら、has_many に :dependent => restrict っていつの間にか増えてるな
これでできるんじゃないだろうか
教えたのだからもし試すのなら報告を義務としたい
そうすることでスレが良くなるから
>>346 おれはそれ買ってデプロイしてるよ。
薄い本だけど3000円は安いと思う。
Subversionなんて古いというやつは少し価値が落ちるかもしれんが。
あとMongrelが中心な感じかな。
>>346 この本は Passenger が載ってないのが惜しい
(タイミング的にちょっと前だったので)
メモリが少ないVPSはMongrelの方がいい場合も多いんじゃないだろうか
>>346 デプロイ面倒なら
クラウドコンピューターでもつかえよ
googleとかaptenaとかamazonとか
アップロード先の設定をしなくてもいいクラウド技術があるだろ
>>351 言ってる意味がわからん。
クラウドって、WebAPIでシステム間を繋ぐような、そんなイメージなんだが・・・。
>>352 ちょっと違う。
Web API でシステムをまたいで、ひとつの大きなシステムをかんがえたときに、
たとえば、システムA とシステムB とシステムC を、SOAP なりの web API で連携するが、
すべて社内の自鯖の場合(社内じゃなくてもいいけど):
→これは、web API でつないでいるけど、クラウドとは言わないよね。
クラウドとは、
・自分で作ったプログラムを、自鯖じゃないところで運用できる
→駅前探検倶楽部の API とか楽天の API を呼び出すのは、クラウドとは言えないの?
→この場合、自分で作ってリリースしたプログラムを呼び出しているのではなく、
他の人が作ったサービスを呼び出しているだけなので、
Web 2.0 的とは言ってよいが、クラウドとは言えない
・運用をホストしているところが、特にこちらがなにもしてくれなくてもスケールしてくれる。
→レン鯖を借りて、そこでプログラムを動かすのとは違うの?
→レン鯖を借りて、自分が作ったプログラムをリリースして動かせるが、
そのプログラムの負荷が大きくなっても、基本的にレン鯖業者は台数を増やしてくれないし、
お金を払って増やしてくれたとしても、それを活かすにはこちらがプログラム改修が必要。
→クラウドコンピューティングの場合、データストアが Bigtable など、もともとサーバが増えたら
自動的にスケールしてくれるような仕組みがある。
>>342 Subversionはあると便利だよ。
1. 開発環境でテストを十分にやってからコミット。
2. 本番環境でsvn up→touch tmp/restart.txt
個人でやる分にはこれで十分な気がする。
サーバの台数も少ないだろうし。
restfulなrouteを使う際に:idの部分を:nameにしてもらうような オプションはないんだろうか。 数字のIDは味気ないからユーザアカウント名にしたいんです。 パスは/users/:nameで、 link_to(h(@user.name), @user) としたときに link_to(h(@user.name), :name=>@user.name) と同じ結果になるイメージです。 /users/newはどうするんだって問題があるのか・・・
試してないけど class User < AR::Base alias to_param name end でどうだろう。
Subversionこれから覚えるんだったら GitかMeなんとかを覚えた方がいい
同感。今なら git
使ったことないのだがGITの利点って具体的にわからん。 実用的な理由でsubversionではとても不便な何かが改善されてるのか? 流行始めてるのはわかるが、流行で飛びつくのってもううんざりだし。
DVCSだと、ローカルでブランチを切ってアレな実験を好き勝手にやっても、 取得元に反映せずに済む。 # svk終了しちゃったしな。
>>353 くわしい説明ありがとう。
勉強になるわ。
>>360 う〜ん、おれとしては特に魅力を感じないなあ
結局なんだかんだCSVがSubversionに置き換えられたように、
gitだのマーシャル?だのになるんだろうが今はいいや
>>362 Mercurialのことなら、「マーキュリアル」(mercuryの形容詞形の名詞的用法)
でも普通は hg って表記する。
insert into t(c1, c2, c3) values('b', 'a', 'r'); は T.create data と書けますが、PostgreSQL 8 からの insert into t(c1, c2, c3) values('b', 'a', 'r') RETURNING id; はどう書けばいいでしょうか。 ( RETURNING id は、insert した id を返してくれます ) execute で SQL を書けば可能ですが、 Rails 風に短縮して書けると嬉しいです。
>>363 うお!イメージにあったスペルと違ってたw
これは恥ずかしい
>>364 ようわからんが、
model = TModel.new
model.c1 = 'b'
model.c2 = 'a'
model.c3 = 'r'
foo = model.create!
で、foo に insert した時のオブジェクトが入るから、
foo.id で取り出せばいいんじゃないの?
>>362 Subversion と Gitなどの分散バージョン管理システムの話が出ているが、
くわしくはム板の該当スレのほうが詳しいが、
別に Git/Mercurial は、Subversion の置き換えではない。
中央集中型のほうが便利なときもあれば、分散型のほうが便利なときもある。
個人で使うのだったら、Git の方が速いなどのという理由や、web 上でも取り上げられることが多くなってきたので
移行している人も多いけど、
大規模プロジェクトで、スキルレベルの低い人もいるような場合は、Subversion のほうがいい。
そんなひとが hg push とか hg pull とか絶対覚えてくれない。
だから要所要所で使っていけばよい。
370 :
364 :2009/06/19(金) 13:37:15 ID:???
>>368 返り値があったのですね。
うまくいきました。ありがとうございますっ。
CVSの時もみんなのスキルレベルが高くないと酷い目に遭ってたしなあ。 結局、専任で必死にマージしてバージョン管理する人間が居たほうがうまく逝く罠。 二人以上がお互いに自分のソースの記述をマージし合って停滞したりもするし。
どんなにいい道具だっておかしな使い方すればダメだよ バージョン管理の場合はスキルレベルじゃなくて物事を整理する能力だと思う それをスキルと言ってしまえばスキルなんだが おれはPCのデスクトップがごちゃごちゃのやつに バージョン管理システムはいじらせたくない
デスクトップぐちゃぐちゃの奴にこそ VCS を使わせて整理の大切さを教える派
読書記録を作ろうと思っています。 ■ books テーブル id|title --+----- 10|foo 11|bar ■ records テーブル id|books_id|comment --+--------+------- 20| 10|good!! 21| 11|bad... model/record.rb に「belongs_to :book」を追加しました。 view/records/show.html.erb に <%=h @memo[:title] %> とした場合は空欄だし、 <%=h book[:titl] %> やm <%=h record[:title] %> としてもタイトルが取得できず、 You have a nil object when you didn't expect it! The error occurred while evaluating nil.title と出ます。DB を見てもデータは入っています。 どうすれば title が引けるでしょうか。
Subversionが足し算ならGit/Mercurialはかけ算 3*3は何ですかと質問して Subversionは3が3つだから3+3+3=9と答えて Git/Mercurialは3*3=9と九九を暗記している
その例え、全然わかんないよ 分かってるやつは理解できるのかもしれないけど
377 :
374 :2009/06/19(金) 16:31:43 ID:???
自己解決しました。 @record.book.title でいけました。
未だにマニュアルを見ないと svnのリポジトリをマージできません。 それなのに git だの hgだのを学ばねばならぬとは楽しみなことだ。 CVSでも、考えてみれば、マージはワーキングコピーのdiff & patchで済ましていた気がする。
ツールを追っかけて、フレームワークを追っかけて
>>378 今では面倒なことすべてやってくれるでしょ。
GUI利用して視覚的に見やすくなってるし。
>>372 >>373 俺はデスクトップぐちゃぐちゃだがsvnリポジトリのコミット担当してるし
ソースは無茶苦茶きれいに整理するし、gitだって使えるぞ
ひどい偏見だw
>>337 そもそも、JavaScriptはRails関係なく使えます。他のフレームワークでも使えるでしょう。
AJAXサポートなど、楽に使える機能も提供されてますよ。
>>342 そういう作業を「デプロイ」といいます。
退屈な作業なので、機械任せにするために、定番どころではcapistranoを使います。
cap deployで一発デプロイできるようになると快感です。
あと、Passengerならapache再起動要らないですよ。
リモートに、touch tmp/restart.txt するだけでPassengerだけ再起動してくれます。
このためのcapistranoの設定(capistrano文脈ではレシピといいます)も、
ネットで検索すればでてきます。
注意したい点は、capistranoは公式ページのドキュメントがなかなかに不親切なため、
ネットのブログに散見される設定(レシピ)を読んだり、ソースを読むかしないと挙動がイマイチわからない点があります。
ただ、Railsをやっている人にはできない作業ではないでしょう。
ぜひ、調べてみてください。
>>342 tracですが、元々はバグトラッキングシステムというくらいですので、バグ管理のものでありましたが、
今ではプロジェクト管理ツールというように広い意味で使われています。
チケット(プロジェクト管理ツールでの問題やタスクの登録単位)を登録することで、
問題やタスクを管理することができます。
複数人でのプロジェクトや他の人に問題などを公開する必要のある場合に効果を発揮するでしょう。
(私は一人プロジェクトでも使ってますが)
また、Subversion、git、Mercurialなどのバージョン管理ツールと連携して、
webでソースを閲覧したり、チケットと
バージョン管理のコミット(切りのよいソースの変更単位)を関連付けて、
お互いをリンクしたり、コミット時に自動的にチケットを終了させる、なんてこともできます。
最近では、チケット駆動開発といって、タスクのようなものをツールに登録していって、
管理ツールでプロジェクトのタスクも管理していく方法も広まってきました。
私はRails製のRedmineというツールを使っています。
Redmineは予想時間や経過時間の記録や集計、
予定日付の指定によるガントチャートの自動作成などができるため、
仕事のプロジェクトや、さらには自分のローカルにインスコしてタスク管理にも使ってます。
>>342 さて、svnとデプロイですが、(これは、gitやmercurialでも状況は同じ)
svnなどで管理しておくと、capistranoからもデプロイしやすいです。
svnの特定リビジョン(バージョン)を常に本番鯖に一発でデプロイする、とかの指定も思うがままです。
そうなると、svnを外部から参照できるように公開しておかなくてはいけないのか?という疑問がわいてきますが、
そうでなくてもcapistranoではデプロイできます。
set :deploy_via, :copy
という設定で検索してみてください。ローカル(やローカルからアクセスできる)svnリポジトリから、
単純なコピーのような感じで、リモートにデプロイできます。
> svnの特定リビジョン(バージョン)を常に本番鯖に一発でデプロイする、とかの指定も思うがままです。 特定ブランチ、最新バージョン といったほうがいいですね。訂正
>>384 くわしくありがとうございます。
デプロイじゃなくてソース管理の話になってしまうけど、今サーバー専用マシン(に見立てたVM)に
svnサーバーいれて、apache連携させて、windowsからTortoiseSVNで操作してみました。
これは便利ですね〜。
capistranoとの連携も試してみようと思います。
ここにいる人たちにとってはスライムレベルの話しかもしれませんが…。
客先の社内システムにrailsで提案してみる。
おれに作らせてくれ。Railsの仕事ないよ。PHPばっか
自分のところは、何で作るかは自分で決められるから今はRailsだけでやってる。 客は何で作るかには興味なくて、欲しいシステムと性能が得られれば文句はないわけなんだよね。 PHPで作れっていうお客さんってどういう感じなのかな?
純粋なユーザーならそうかもしれんが、 受注したやつを回すところもあるから。 自分とこのエンジニアが対応できる言語となると、 数としてはPHPの方がずっと優勢じゃないだろうか。
>>390 あと追加で、お客さんとこでもシステム要員を抱えてるとことか
そういう人たちは基本的には運用だけなんだけど
>>390 なるほど。そういう事情ならPHPで作って欲しいと言われるのは分かる。
ここの連中は元請という言葉を知らんのかw
JRuby on Railsって 使う言語を RubyからJRubyに変えてあるだけで 何か特別な事って必要ないの?
>>383 redmine、インストールしてみますた。
これはわかりやすくいいですね。
svnと連携できて、感動しました(ただ、必要かはわかりませんが(笑)
うちの会社、進捗管理はエクセル、ソース管理はvssなんですよねぇ。
会社の改善会議で提案してみようかしら(=ω=)
チケットの最低単位が「日」なのがちょっと痛い。
396 :
nobodyさん :2009/06/22(月) 21:42:29 ID:ashzWp6s
質問させてください。 script/console のログをdevelopment.logに出力したいんですが、どうすればよいでしょうか?? 教えていただきたく><
お断りします
お断りします|-`).。oO(・・・)
girl = Girl.find(美人) girl.boy_friend = Boy.find(俺) girl.save これが失敗します>< girl.boy_friend = Boy.find(池面) girl.save これだと成功するんです! idが俺のレコードもちゃんとあるんです! 原因がわかりません><
おまえはボーイフレンドにしたくないってことだろ Railsすごいな
本当に困っているのかネタなのかわからんが、 マジレスすると、save じゃなくて save! にすると、失敗した場合に例外が出るから、そのスタックトレースを眺めるとか。
下記のサイトのFour Days on Rails 2.0をちょっとやってみていて気になったことなのですが、
Four Days on Rails 2.0(日本語)を公開します
http://rails.to/articles/2008/05/05/4-days-on-rails-2-0-released http://localhost:3000/items/ から 一覧の編集アイコンより
http://localhost:3000/items/14/edit に飛んでちゃんとItemが編集できます。
Railsは通常、/Controller/Action/id のようになっていると思っていたのですが、
上記の例だとURLが/Controller/id/Action/ になっているようです。
これってどういうことなんでしょうか?
該当リンク元は以下のようになっていて、( app/views/items/_index_stripes.html.erb )
<td><%= link_to show_image('edit'), {:controller => 'items', :action => 'edit', :id => index_stripes.id} %></td>
コンロトーラーは以下のようになってます。 app/controllers/items_controller.rb
# GET /items/1/edit
def edit
@item = Item.find(params[:id])
end
config/routes.rb は、以下のような感じ。(必要なところのみ記述)
ActionController::Routing::Routes.draw do |map|
map.resources :notes
map.resources :items
map.resources :categories
map.root :controller => "items"
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
というか、ほとんど、今見たら、scaffoldしたままですね…。
環境: Rails 2.3.2, Ruby 1.8.7, Windows XP SP3
>>403 >Railsは通常、/Controller/Action/id のようになっていると思っていたのですが、
>上記の例だとURLが/Controller/id/Action/ になっているようです。
Rails 2.0 から RESTfull なかんじにかわったかんじ
>>400 バリデーションの問題。
ガードが固いんですよ。
mem360MBで、1日1500ユニークユーザ捌いてたけど、 passengerじゃオチまくって話にならん!
>>406 それ、おれと同じところのVPSじゃないだろうか、
おれは180Mだが数百ユーザーで落ちまくりだった。
悲しい対処でがんばってるが、360Mでもダメか。
PassengerのMAXインスタンスはいくつにしてるの?
おれは2だけど。
なんかメモリの少ないVPSあたりだと、
Mongrelの方がいいような気がする。
Railsデプロイのアドバイスに従ってればよかった。
このスレでPassengerじゃないと古いとかいうやつがいるから、
と人のせいにしてみる。
409 :
349 :2009/06/24(水) 22:50:30 ID:???
>>408 それはおれのことかな?(笑)
もしそうだったとして、自分は VPS 等でなく、占有できる PC でしか動かしたことがないので、
あなたのレスは参考になるから、もっといろいろ書いてほしい
>>406 そのVPSがどこか教えてくれ。
今サーバを検討中。
>>410 linodeだよ。
mongrelで4つくらいプロセス立ち上げて、バランサで振り分ける
ようにしたら普通に動くようになった。
>>409 メモリ4Gの専用サーバーの人?
前にそういう書き込みがあったように記憶してる。
その人は安定してるってことだったから、
それくらいがっつり積んでれば安定するのかなとうらやましく思った。
Rubyも1.9.1だしPostgreSQLは8.4βだし不安定要素がありすぎて、
Passengerの問題だけではないようにも思うけど。
遊びではないけど自分だけの責任で済むから、
ちょっと野心的にやりすぎた。
>>406 のRubyのバージョンが知りたいなあ。
>>410 おれはCPIだよ。
いろいろ検討したけどあそこが一番いいように思った。
バカみたいに通信が発生すると別途相談らしいけど、
基本どれだけ通信しても追加料金かからないし。
運が良かっただけかもしれないけど、
電話で問い合わせたとき担当者もいい感じだった。
413 :
412 :2009/06/24(水) 23:57:43 ID:???
> mongrelで4つくらいプロセス立ち上げて、バランサで振り分ける > ようにしたら普通に動くようになった。 まじかよ・・・
>>414 おお、サンクス。Apache併用方式か。
おれはモバイルだからIPで判別してPCからのリクエストをはじきたいんだよね。
Mongrelはそのへん分からなかったけど、Apacheに任せればいいか。
1.9.1はMongrel Clusterのインストールに問題があったのも躊躇した理由だが、
いろいろ試してみるよ。
416 :
409 :2009/06/25(木) 01:29:57 ID:???
>>412 >
>>409 > メモリ4Gの専用サーバーの人?
いや、ちがいます。
Passneger を動かしているのは、職場や客先での業務イントラだけ。
もちろん専用のサーバなので、メモリも2GBとか4GBとか。
だけど同時アクセス数は少ないけどね
Ruby の Web 環境レベルが PHP に比べて低すぎる。 Ruby は言語が綺麗でも実用的じゃない。書生論。
それで実際どうしたらよくなるのって話をしているときに、 そういうもともと論から始めるのも、いかにも書生論って感じだよね。 まぁGoogle App Engineで、Pythonでも始めたら? 信頼と安心のGoogleブランド
>>417 古いけど実績はある。
枯れてるサーバーはそうそう急激な変更はしないよ。
サーバーは安定しなきゃ話にならないし、適材適所じゃないだろうか。
421 :
nobodyさん :2009/06/25(木) 16:43:20 ID:kFfq4IDX
>>369 Bazaarなら中央も分散もどちらの運用も可能ですよ!
今メモリの残り量が15Mくらい。これじゃ24時にはmysqlが落ちる・・・。
バランサ必須ってのは金かかるな。やっぱりフリーで大規模は無謀か。
>>412 遅レスですが、メモリ4Gの専用サーバの人です。
1台でWebとDBの両方を動かすとメモリを食ったり、
IO周りで足を引っ張るのでmongrel、Passengerのどちらでも厳しいですね。
という事で、Webサーバ(Passenger)+DBサーバ(PostgreSQL)の2台構成で
動かしていて、1日平均50万アクセスくらい処理できてます。
今後もアクセスが増えていくと思うので、状況次第で
Webサーバは2台、3台と増やしていってDNSラウンドロビンで振り分ける予定です。
DBのほうは、今のところ余裕があるのでそのまま。
>>424 バランサーといっても、
>>414 の場合はハードのロードバランサーを使うんじゃなくて、
Apacheのバランシング機能を使うだけだよ。
大規模でそれなりにお金がかかるのは間違いないと思うけど。
>>425 おお、サンクス。
専用2台って最低でも月4〜5万かかるよね。
ゆとりある組とかつかつ組のノウハウは別にためないときついね。
おれはPostgreSQLのキャッシュを10Mにして抑えてるよ。
データはためてないようにしてる。
しかし50万を2台ってやるなあ。
それだとピークタイムは20アクセス/秒以上もあり得るよね。
おれも静的コンテンツにできるものは徹底的に静的にしたりがんばってるのだが。
バッチやプチクローラー(対象は数百くらい)もあるから、メモリ360Mにあげようかな。
rsyslogとかも引きずられて落ちたりするし><
月4、5万かけるなら、EeePCにCentOSいれてサーバーにするのも手かも・・・ サーバー室はミニ冷蔵庫w
うっかり旅行もできないけどな 比較の問題だが安心と安全を金で買うようなものだ 24時間監視とか個人じゃ無理だし
PHPにすればいいのに
>>404 サンクス。RESTfullだとそんな感じのURLになるんか。RESTfullでぐぐてクルわ
あがりとう
ついでに聞きたいのですが、 サイト名やページ名のように、デフォルト値を共通に設定したり、 viewなどで使いまわしたい場合は、Railsではどうするのがよいのでしょうか? ・共通コントローラーを作って、継承させる ・ヘルパーを作る 共通コントローラーだと、全部のコントローラーをそれから派生するように決まりつくらないとあかんですよね。 手間も面倒くさい、とかいったらいかんよなあ…
>>429 何回覚えてもisset()の挙動を忘れるのでやめました
433 :
431 :2009/06/26(金) 18:55:09 ID:???
application_controller.rb にかけばいいのね。お誂え向けすぎる。そして、初心者過ぎる俺泣いた
それ表示だけだろ?普通viewに埋め込める共通部品を作ると思うぞ。 なんでもコントローラーでやろうとする方が初心者の考えだと思う。 どうしても変数でほしいならconfigでやるべきじゃないだろうか。
435 :
406 :2009/06/27(土) 00:21:23 ID:???
>>406 ちょっと無責任な書き込みしてしまったので、訂正。
メモリ360mのVPSでpassengerじゃ落ちると書いたんだけど、passengerのせいじゃなかった。
mysqlがメモリ不足で落ちるのが原因で、メモリ不足が起きる原因がapacheのチューニング不足だった。
(メモリ不足で落ちると断定したのは、mysqlがmallocに失敗してたから。確かCのメモリ確保関数だった気が…。)
今はapache + mongrel * 3 構成で50kPV/日が平気。
今は安定してるのでpassengerに戻す気は無し。
ちなみにvpsはここ。
http://www.linode.com/
>>431 俺の場合は、共有レイアウトファイルを作って、それに共通メニューとか
サイトロゴを書き込んで、コントローラの先頭にlayout "common"みたいな
感じで共通レイアウトファイルを使用するよう設定してる。
content_forつかえば、ビューのソースからレイアウトファイルへの出力も
できるから、あんまり不便だとおもったことない。
>>435 だと思った。
Passengerのメモリ管理はかなり優秀で、一定期間アクセスがないとアプリケーション
サーバ側のプロセスは消滅してメモリ占有量はほぼゼロになるとどこかで読んだ覚え
がある。
あとMySQLは少ないメモリ量で効率よく動くのが苦手で、その点ではPostgreSQLの
ほうが優れてるらしい。
それでも300MB程度でMySQLやPostgreSQLを動かすのは自殺行為だと思う。
そのメモリ容量でどうしてもDBを使いたいならFirebird一択じゃないか。
438 :
406 :2009/06/27(土) 01:15:51 ID:???
>>437 …FirebirdというDBを初めて知った。
ちょっと勉強してみる。
mysqlを選んだのは、phpMyAdminでGUI操作できるという動機…。
>>437 > あとMySQLは少ないメモリ量で効率よく動くのが苦手で、その点ではPostgreSQLの
> ほうが優れてるらしい。
初めて知った。
MySQL は Postgres よりも軽くて、必要なメモリも少ないものだと思っていた。
あと組み込みDBといったら sqlite とかじゃないの?
sqllite が、MySQL みたいに排他制御してくれるかどうか知らないけど
>>435 > メモリ不足が起きる原因がapacheのチューニング不足だった
kwsk!
>>437 Firefirdを勧めるやつ初めてw
もともと商用だしsqliteあたりよりいいのかもしれないけど
ちなみに300Mと言ってもOSが使う分は含まれてないと思うぞ
自殺行為というほどじゃないような
441 :
437 :2009/06/27(土) 07:27:54 ID:???
SQLiteはお察しの通り排他制御ができない。ファイルベースだからね。 同時にアクセスが来ると、しばらくテーブルにロックがかかってエラー 起きまくることがある。 まあ、うちのサーバで起きたんですけどね。 1日1,000アクセス程度でそういう現象が出るようになった。
DBはありったけメモり喰って速度稼いでるから専用のほうがパフォーマンス高いよ。 1鯖で、アパチもルビもDBもってのは大規模では無理が有る。
444 :
nobodyさん :2009/06/27(土) 15:30:33 ID:lkILxYvh
Apacheで動かしたいのですが,うまくいきません。
(遅いのは承知の上でcgiのみです。まずは基本からということで)
環境はOSX10.5 ruby 1.8.6 Rails 2.3.2 Apache 2.2.9で何れもプリインストールのままです。
プロジェクトは/Users/Rails/myproに配置して,scaffoldでmytestを作ってます。
パーミッションはmypro以下全て755にしてあります。
script/serverでは当然
http://localhost:3000/mytestで問題なく起動してます 。
でhttpd-ror.confを次のようにしてhttpd.conf内でロードしてます。
Alias /mypro /Users/Rails/mypro/public
<Directory /Users/Rails/mypro/public>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
AllowOverride all
Allow from all
Order allow,deny
RewriteEngine On
RewriteBase /mypro
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
</Directory>
http://localhost/myproではWelcome abordがきちんと表示されます。
http://localhost/mypro/505でもpublic内の505.htmlがきちんと表示されます 。
ところが
http://localhost/mypro/mytestがダメです 。
Not Found:The requested URL /mypro/dispatch.cgi was not found on this server.
の表示がでるだけです。
dispatch.cgiがよくわかりません。URLのリクエストをクラスのメソッドに割り当てているはずなのですが
アドバイスをよろしくお願いします。
>>435 参考になります。
しかし、
>>437 ということは、Passengerだともっとパフォーマンスがあがるのかもね。
>>442 REEなんて初めて知ったよ。
37Signalsが使ってるならRailsは大丈夫そうだね。
PHPからRailsに乗り換えて、サービス公開しようとしてるんだけど、
作るのは手早くできても、個人レベルだと公開するのがとにかく大変だね。
なやましいなぁ。
>>444 > dispatch.cgiがよくわかりません。
RewriteRuleに自分で書いてるじゃん。振り分けを行う起点だよ。
今時のフレームワークは名前こそ違え、大抵ディスパッチャで振り分けをしてる。
基本から学びたいならフレームワークのソースから読んだ方がいいよ。
mem360MB坊だけど、rails+mysqlでも今んところ快適だYO! メモリはOS+アプリで360MB。 月19.95$だし、たぶん1万人/日(!=pv)くらいなら耐えれそう。 あと安いサーバーのがかえってチューニングのスキルがあがる気がしたw 個人サイトで専用サーバは、俺は金がもったいないと思うな。 というか貧乏なので無理(くやしいのう!) メモリ不足でmysqlが落ちる問題は、apacheへの接続人数とmysqlの メモリ上限を下げたらなおった。 接続人数絞っても快適なのは、おそらく1アクセスの負荷が低いから。 今まで落ちてたのは、短短期間に偶然多くのリクエストが発生したとき だと思う。 RailsはSQLキャッシュが有効になるように組んでるし、アクセス頻度の 高いコンテンツはページキャッシュを使ってる。
RadRails+EclipseからSVNへコミットし、Capistranoでデプロイする…。 これができる環境を1人で作り上げるだけで、1つのプロジェクトを終えたような 気分だ・・・w
サービス公開するんなら、500MBが最低ラインじゃね? ひと月あと10ドルくらいケチケチすんな。
>>449 ちゃんと使えば安くすむところを、スキルの無さのせいで冗長化させて
対応するなんてナンセンス。
> あと安いサーバーのがかえってチューニングのスキルがあがる気がしたw すげーわかる。 負荷を半分に減らせるとすると、 仮に大ヒットしてサーバーが10台必要になるところが5台。 個人レベルのこじんまりしてるものなら月数千円の違いだが、 いろいろ苦労して損はない気がする。 リソースをじゃぶじゃぶに使うのってキリがないしな。
>>450 「冗長化」の意味すらまともに知らない素人が他人のスキルにケチつけるとか
ちゃんちゃらおかしいわ。
10年後に出直してこい。
453 :
444 :2009/06/27(土) 19:43:10 ID:???
>>446 RewriteRuleの部分は理解できてます。(リクエストのパスを書き換えてるということ)
READMEのとおりにしているのですが、dispatch.cgiというファイルはプロジェクト内を探しても見当たらないし,READMEの通りなのにうまくいかない原因が分からず,よって対処法もわからないのです。
dispatch.cgiは自分でコピーするんじゃないのか? cgiでやったことないけど、 MongrelとかPassengerはその辺を勝手にやってくれると認識してる。 今見てみたが、READMEファイルの近くにdispatchersってディレクトリがあるから、 そこからコピーするんじゃないだろうか。
455 :
445 :2009/06/28(日) 11:16:18 ID:???
Railsでシステムを作るときに、 絶対必要、あったら便利、個人的におすすめ、 というようなプラグインを教えてください。 環境はRuby1.9.1 Rails 2.3です。 よろしくお願いします。
>>455 プラグインじゃないけど、そういう質問をする人に対してだったら、
つ Ruby 1.8.7
一回作ってみて、不便と思った事を書いたほうが。 つ ブラウザ、テキストエディタ
458 :
445 :2009/06/29(月) 10:19:49 ID:???
割と言い流れで参考になると思ったが、
>>456-457 で台無し
Mr.1.8.7はブログあたりで主張しろよ
プラグインはページャーものが定番だろうけど、
acts_as_listは便利だと思った。
DBにpositionカラムを追加すると表示順を手軽に管理できる。
deleted_atカラムを追加して論理削除を管理する、
acts_as_paranoidも便利そうだ。どれも有名だろうけど。
Railsの仕事が入ったからいろいろ試してみたい。
>>459 1.9系でrailsを動かす予定なの?
横から失礼します。
http://rubyonrails.org/download We recommend Ruby 1.8.7 for use with Rails.
Ruby 1.8.6, 1.8.5, 1.8.4 and 1.8.2 are still usable too,
but version 1.8.3 is not.
だそうですよ。
Ruby 1.9 対応の Rails 3.0 は順調なの?
>>460 予定ではね。今でも動かしてるけど。
2.3で1.9対応はされてるし、まあまあ動く。
ActiveResourceはダメだったけど。
アプリ開発者が創り出すバグの方がよほど問題になるくらいまできてると思う。
>>459 >Mr.1.8.7はブログあたりで主張しろよ
何で?
>>455 のような人には、現状の1.9.1はおすすめしない。
1.8.7の方が、参考になる本も多いので使いやすいと思う。
人とまともに会話できないやつは 「あっちに行ってください」と言われるもんだぞ
>>455 が妙な質問するからこうなったんじゃないかな?
どんなアプリを作るかによってまったく違うんだし、
Ruby 1.9.1 だと動かないプラグインやライブラリもあったりするからね。
Ruby 厨が PHP5 の互換性を叩いていたことを思い出した
>>456 携帯サイトを作るならjpmobileがおすすめ。
ただし、gemで入る最新の0.0.4ではrails2.3で動かない。
githubにある開発版なら動くかもしれない。
469 :
468 :2009/06/29(月) 22:17:47 ID:???
470 :
455 :2009/06/29(月) 22:33:03 ID:???
>>459 ありがとう、みてみます。
ページャー物の定番もおすすめがあったら教えてください。
>>464 Ruby1.9はそんなに互換性に問題があるの?
>>466 どんなアプリを作るにも便利なものってあると思うから聞いたんだけどね。
妙な質問に妙なレスか。
>>468 サンキュー。
携帯対応も考えてます。
github
>>470 自己レス、途中で送ってしまいました。
>>468 サンキュー。
携帯対応も考えてます。
github使ったことないけど、読み方はギットハブでいいのかな。
とりあえずgitいれてみる。
>>471 ページングならwill_paginateがお手軽。
これもgithubに移行しちゃったから、gem install will_paginateでは最新版が入らない。
インストールする場合は、↓
gem sources -a
http://gems.github.com gem install mislav-will_paginate
でも、gem install will_paginateで入るバージョンでも特に困らなかったりする。
とりあえずpartialのエンコーディングがASCII-8BITになって絶望した。>1.9 どこで指定すればいいのやら。
どうせ自分で使ってもないんだろ? そんなのここにくるやつは大抵チェックしてるからいらんよ
>>474 に自己レス
partialじゃなくて、DB(SQLite3)に入ってる文字列のほうがASCII-8BIT
になってました。
>>444 基本と思っているかもしれないが、RailsではCGIは基本じゃないよ。
練習したいだけなら、webrickかmongrelでいいだろうし(script/server)
そうじゃなかったら、つまりちゃんとサーバーとして稼動させたかったら、重くてまともな速度で動かずイライラするだろう。
RailsではCGIの出番はないよ。
>>448 俺も最初、それですげー満足した気分になったわww
ちょっと弄ってコミット→一発deployで満足ww
>>472 gem sourcesとか初めて知った。
ありがとう。
>>473 なるほど、ようやく合点がいきました。
確かにpostgresqlのライブラリがgemで入らなかった。
ググったら解決策を書いてる人がいたから、
そのとおりにCのヘッダファイルをいじったりしたよ。
とりあえず爆死するくらいの地雷を踏むまでは1.9.1で使ってみる。
ポスグレはgem install pgで普通にいけたが 「postgres」のgem使ってない?
別人だけど postgres-pr 使っていた。 今は pg がいいの?
478みたいなお方が居るから1.9の完成度が上がっていくんだ。 ありがとうございます。 バグや問題があったら報告するなりブログに書くなりしてください
>>480 postgres-prって開発止まってるんじゃなかったっけ?
最終的な手順しか残してないから詳細は忘れたが、
1.9.1だとpostgres-prじゃ(たしか)動かないし、
ポスグレのadapterではpgがデフォルトになってるはず。
ちょっとわからないことがあるんですが paperclip つかってモデルでサムネイル作るとき :thumb => ["100x100", jpg] でjpegじゃないファイルはjpegに変換したいんだけど epsとbmp(今のところこの2つだけ確認)をアップロードすると できたサムネイルがモノクロになるんですよ。 ImageMagickで直接convertするとカラーで変換するのに・・・ paperclipのrb全部呼んでもカラー設定の記述が見あたらないし。
すごく初歩的なことをお聞きするのですが、 Rails 2.xからはRESTfulがやけに前面に押し出されているのですが、なるべくこれに沿ったほうがよいのでしょうか? 例えば、本屋みたいなアプリを作るとして 「カテゴリ 12 の 4 番目の本」みたいにアクセスできるをURLを作りたい場合、 map.resouces の has_manyオプションを使うと、 /categories/12/books/4 みたいにURLを構築できるわけですが、 本屋の場合、ユーザーにはeditとかupdateなどのメソッドは必要ないのです。 (本の編集はそもそも管理ページからやりたい) この場合、scaffoldなんかでばんばんコントローラーやビューなどを生成していくと、 いらない編集系のメソッド(editやupdate、createなど)ができるのですが、削除しちゃったりしていいものでしょうか? そうすると、それってRESTじゃないような?という気がします…。 URLのルーティングの解説みると、map.resoucesとかでネストする方法なんかが、充実というか楽だったりするのですが、 上記のような例の場合は、1.xのころ?にあったmap.connectでシコシコ書くのがよいのでしょうか?
ちょっと話が変わるけど、REST の本質は、データの CRUD を、
Http の PUT/GET/POST/DELETE メソッドで行うことであり、
URL を /categories/12/books/4 というように見せることとはちょっと違うと思うのだが。
んで、
>>485 さんの場合、自分の作るアプリケーションが、他のツールから REST クライアントで
呼び出されることを想定しない場合、削除しちゃっていいんじゃないの?
487 :
485 :2009/06/30(火) 16:47:48 ID:???
>>486 あらら、そうしたら、
>>485 の例だとREST全然関係ない感じですね…。
PUT/GET/POST/DELETEを全然考慮するつもりなかったので…。
ここみたら、map.connectの記述もそんなに難しくないみたいですので、
map.connect で書いてみます。
ヽ( ・∀・)ノくまくまー(2005-07-25)
http://wota.jp/ac/?date=20050725 一般的なRESTクライアントがどういったものかよくわかっていないのですが、
RESTは一種のapi的に使うことも考慮している、という感じなんでしょうかね。
railsとFlashをRESTで連携、見たいな記事を見たことはあるくらいなのですが…。
488 :
485 :2009/06/30(火) 18:38:34 ID:???
490 :
nobodyさん :2009/07/01(水) 06:20:03 ID:Q9Au53lL
ユーザーをページ単位で返すってことだと思うが あんまり突き詰めて考えることはないんじゃないだろうか
492 :
485 :2009/07/01(水) 16:40:32 ID:???
>>489 サンクス。真っ先に公式文章を読むべきでした。
で、読んでいてつまづいたのですが、
"Rule of thumb: resources should never be nested more than 1 level deep. "
という注意事項(経験的法則)があり、「1レベル以上(を超える?)ネストすべきでない」ってことなんですが、
これだと、
>>485 の /categories/12/books/4 みたいな例は、Railsではできるが、
やめた方がよい、ということなのでしょうか?
下記でもそのことが触れられています。
the { buckblogs :here }: Nesting resources
http://weblog.jamisbuck.org/2007/2/5/nesting-resources
>>492 /categories/12 はネストなし。
/categories/12/books/4 はネストレベル1。
で、more thanは比較対象を含まない。
つまりここでは1より深い(深さ2以上)という意味。
1以上だったら、1 level or more みたいな表現になる。
まあ、いずれにせよ引用されているフレーズを見る限り経験則に過ぎないんで、
自分で不都合がないなら金科玉条のごとく看做す必要はないと思う。
おれだったら categories/12?book_id=4 とやってしまうなあ。 クエリーストリングを使わないことにすると、 すごく大変なんじゃないだろうか。
RESTでは、モノ単体やモノの集合をリソースとみなしてURLを割り当てる。
>>494 のような場合だったら本を特定するURLを割り当てるのだろうな。
フォームで条件を指定すると該当するものの集合が得られる、
というURLはどう表現すればいいかよくわからん。
検索結果をリソースとみなして、フォームから条件をPOSTして、
検索結果リソースを新規作成後にステータス 201 Createdでリダイ
レクトだろうか。
496 :
485 :2009/07/01(水) 17:53:46 ID:???
>>493 ああ、 more than ってそれを含まないのですね。
しかも、ネストレベル1の意味を取り違えてました。最初のエンストした段階がネストレベル1なんですね。
感謝!
>>494 たぶん、検索など、たくさんのパラメータを持つ場合、クエリーを使うことになると思います。
ただ、これだと、bookのidが4のカテゴリーの1つ(カテゴリid=12)みたいなニュアンス(カテゴリー12のbookというよりは)
な感じがします。
>>495 たぶん、本来ならなるべく一意で特定できるURLをってことなんでしょうね…。
/categories/12/books/4 というより、
/books/13 ←/categories/12/books/4のbookをあらわしたもの 13=idそのもの
>>492 の一番下のリンク先読んでてそういう感じがしました。
>>496 それって適当な例えだと思ってた。
もしあるbookを特定するためにそのURLになるんだったら、
テーブルの設計を見直す必要があるんじゃないだろうか。
代替キー(大抵意味のない連番)なしで自然キー(意味のあるキー)だけだときついよ。
自然キーは一意のデータを取得するために、いくつもカラムが必要になる可能性があるから。
内部的に自然キーを使うのは当然なんだけど、
URLとかデータを一意に特定したい場合は代替キーのみがいいと思う。
気持ち悪いって人もいるけど、その代償として工数がかさむしバグも多くなる。
amazonは代替キーでも自然キーでもアクセスできるようになってる
Amazonって代替キー使ってるのか? ほとんど知らないけど、ASINとかいうやつも自然キーっぽいのだが。
さっき、OneClick Installerを使って、Rubyをインストールしました。 Railsもインストールしたくて、試みたのですが、下記のようにエラーになります。 どうしたらうまくいきますか? C:\Documents and Settings\boku>gem install trails ERROR: While executing gem ... (Zlib::GzipFile::Error) not in gzip format
>>502 LinuxならZlibが必ず入ってると思ってるアホ発見
>>501 OneClick Installerは使ったことないけど、スペルミスってことはないの?
×trails
○rails
>>504 試してみましたが、同じエラーになります。
このコマンドは、Rubyのディレクトリに移動してやってみてもダメでした。
>>501 エラーメッセージ
>ERROR: While executing gem ... (Zlib::GzipFile::Error)
>not in gzip format
で検索すると対応策が出ているね
なんで
>>503 のレスがスルーされてるんだ?
zlibを入れればいいじゃん。
おれは今確認したら1.1.4.1を入れてるな
>>503 いや入ってるよ?
さすがに全てのディストリで必ずとは言わないが、CD1枚のUbuntuにすら
入ってる。ましてやDebian、CentOSをやだ。
元の話題に戻るが、あの程度自力で解決できないような素人が、Windows
でRails開発とか地雷を踏むもんじゃない。
しかし素人ほどWindowsから離れられないという悲喜劇。
>>508 自分で「必ずではない」と言ってるみたいだけど
やっぱアホなの?
アホアホと馬鹿のひとつおぼえだな。 zlibの入ってないディストリでも探して1人で悦に入ってろよ。
>>509 そういうWindowsから離れられない素人はRailsに手を出すべきじゃないと
言っておこう。
だってMatz自身がWindows?何それおいしいの状態だし。
そのうち原因も分かると思うので、とりあえず、Railsなしではじめます。 レスをしてくれた方々、ありがとうございました。
いや原因はさんざん言われつくしてるじゃないか。 そもそもエラーメッセージが丁寧に教えてくれてるのに、 ひょっとして英語だからって読んでないの?
すいません、できましたw gemというのをインストールしていませんでしたw
松本教祖がウィンドウズに積極的じゃないしな。 オフィス並みにメジャーアプリなら、ウィンドウズ使ってる丸の内OLにモテモテなのに。
Mac使ってるような文化系女子にモテモテだからいーんです。
matzがlinux派とかそういう問題じゃないよ この人は基本的に自分の好きなことしかやらないし ドキュメント書くのも面倒くさいって言ってるし
マク使ってるよなマニアックな女子に持ててても嬉しくないと思う。 やっぱりウィンドウズ使ってる丸の内OLだろう。
>>515 解決したのならそれはそれで良いんだけど、一寸気になったので一言。
もしかして普通にコマンドプロンプトから実行したんじゃない?
すべてのプログラム -> Ruby-186-???? -> RubyGems -> RubyGems Package Manager
で起動されるコマンドプロンプトからやってみた?
開発できても配置でつまずくフラグw
まったくどいつもこいつも素人臭い質問ばかりしやがって。 この俺様がハイブローな質問をしてやるから、誰か答えてみやがれ。 さあ、いくぜ。 「Railsで一定時間ごとにある処理を実行するにはどうしたらいいんだ」 フフフ、どうだ答えられまい。 どうだ、誰か答えられるものなら答えてみろ。 てゆうか、教えて。 お願いします。
(Linuxなら)cronとscript/runnerを組み合わせろ。次
Windowsなら、cygwinのcronか、タスクスケジューラとscript/runnerだろうか
Windowsでrails開発地雷って言ってたけど、最近仕事でrails使い始めてようやく意味わかってきたわ…。 ・Rubyの起動周りがとにかく遅い(rake、script/generate、gemコマンド等日常作業がイラライする) ・gemsで特有の罠あり(ネイティブDLLが提供されてないとか) ・結局、Unix系で動かすなら近い環境の方がいい IDEほしいなら、NetBeansとかRadRailsは他の環境でも動く品 1番目が特にガンだわ。 デプロイ先のLinux(Ubunut)でRubyコマンドの起動がメチャクチャ早くて、腸びっくりした。まさに瞬時。 Windowsだと、そこそこスペックあっても(Core2Quadマシンだけど)もっさりもっさり…。 マジVMWareかandLinuxか何か導入したくなってる
マジ VMWare 入れればいいのに。マゾ?
上のほうでlinode使ってるって言ってた人に質問です。 日本国内からアクセスしたときの遅延はどのくらいでしょうか。
>>525 Linuxで実際にGUI開発環境使ったことある?
おれはVirtualBoxでCentOS入れて開発してるけど、
ことGUI周りに関してはWindowsのよさを痛感すると思うよ。
WindowsのGUIのどの部分が優れているのか詳しく
530 :
今日は曇り ◆twZ04DwX3o :2009/07/02(木) 15:25:05 ID:w8jxLyuc
ここnobodyさんしかいないのか?
>>530 ここは、ってどういう意味?
どこかnobodyさんがいないスレでもあるのかい?
>>527 ホップ数とか、ラウンドトリップの時間なら手元で調べられるんじゃない?
他に何が知りたい?
単純にHTTPとかアプリサーバの反応の軽い重いとかだとサーバのロードも関係してくるしなぁ。
超初心者用豆知識 gemからRailsをインストールするのにFWが邪魔して、できないこともある。 うまくいかない人は、FWを一時的に無効にして再挑戦w
>>529 使ってて一番大きいのは反応じゃないだろうか。
遅いというのもあるけど、反応にばらつきがある。
細かい動作の完成度もバカにならない。ペーストが変なところに貼り付いたりとか。
なんだかんだ見た目もWinはかなり配慮されてるし。まあ、これは個人的な印象。
かけてる金がすごいだろうから、当然と言えば当然だけどね。
CentOSはデスクトップで使うことなんか考えて作られてないんだから、 それとWindowsを比べてどうすんだ。 比べるならUbuntuだと思うが。
それにLinuxデスクトップは、自分好みにカスタマイズしてなんぼだ。 現状が気に入らないならスキル次第でかなり深いところまで変更 することができる。 初心者から上級者まで一律お仕着せのMacとそのマネのWindows とはそこが違う。
537 :
nobodyさん :2009/07/02(木) 21:33:39 ID:Ot61hTL3
しかしわざわざGUIにスキルを使うのもどうかと。
>>534 > 遅いというのもあるけど、反応にばらつきがある。
これLinux関係ないな、メモリが少なくてスワップ発生、
HDDは遅いけどディスクキャッシュが効いてるから速くなったり遅かったり、
て事でしょ?Windowsでもなるよ
コピペとかはまあ、操作体系の違いだから慣れるしかない
WindowsのGUIライブラリは基本的に一つしか無いから
その辺がまとまってるのは優れてるといってもいいか
まあ規模が違うから、ウィンドウズのほうが枯れてまともに使えるところはある。 犬だとまだまだ使ってる香具師が少ないから洗練されてない。 鯖なら常時起動してるから、起動させっぱにすれば良いだけ。 perlもjavaも同じ。そのためにmod_rubyとか小細工してるし。 開発だとどこでも開発したくて、ノートとかに開発環境作ると、ウィンドウズの便利さを痛感する。みんながモバイルで当たり前に使ってるありがたさ。 その当たり前の機能が犬だとまだまだ不十分なのが現実。
>>523 フフン、思ったより骨がありそうだな。だが次の質問はどうだ。
今度は質問が長いぞ。
「現在時刻を知るにはどうすればよいか、と問えば Time.now と答えるだろう。
二時間前なら 2.hours.ago だ、と聞かれてもいないことまで答えるかもしれないな。
だが、それを一回のリクエストの間に何回も使う場合はどうするのだ。
毎回 Time.now では呼び出しのたびに、ちょっとづつ変わるわけだ。
だったら @time_now = Time.now として、二回目以後の参照は @time_now を使えばいい。
本当にこれでいいのかな?フフル、よく考えてみることだ。」
ねえ、どうかな、本当にこれでいいのかな?
何かRailsが用意してくれたリクエストされた時刻のようなものはないのでしょうか?
べつにRuby自体とは関係ないGUIの使い勝手なんてどっちでもいいじゃないの。 結局慣れとスキルの問題、と。 で、結局WinでRubyの起動がLinuxに比べて遅いのはガチ?
>>540 Railsに実装されているすべての機能を知ってるわけじゃないから確実ではないがたぶんないように思う。
リクエストの中で何度も使うならコントローラーの中で変数に格納する。
べた書きするんじゃなくてfilter機能を使う。
すべてのコントローラーで使いたいならApplicationControllerにfilterを入れる。
フレームワークを使うと「フレームワークで機能が提供されているなら何が何でも使わなければならない」
という強迫観念みたいなものにとりつかれるときがある。こうなると、
・今回のようにただ変数にセットすれば10秒で済むものを、何か機能がないか調べまくる(かえって時間が膨大にかかる)
・後でフレームの機能を使ってないことが分かると(または機能が追加されると)、すべて修正してきれいにしたくなる(きりがない)
などの強力な副作用が出てくる。
フレームワークで提供されてるものを無視しまくるのも問題だが。
まず提供されている核となる重要な機能はしっかり押さえるけど、
周辺の便利機能は逃しても仕方ないくらいでやらないと何も進まないぞ。
今回の場合だと、「コントローラーに実装→filterを使う」というのははずしちゃいけないと思う
(ほかにいいやり方があるかもだが)。
というわけで完全な答えじゃなくて申し訳ないが、次
>>532 同じ画像を国内のレンサバとlinodeにおいて、
ブラウザからアクセスしたときのタイムラグがわかるとありがたいです。
ホップ数を測るというのはlinode.comに対してということでしょうか。
サービス用のインフラと、自社サイトのインフラが同じかどうかわからないと思うのですが。
本家に持っていく経由地としてそのリポジトリがあるだけじゃない? なんなら545が最終的なまとめをやってあげれば?手柄ゲットだぜ。 1行ずつ訳すって中学の英語の授業みたいだなw おもろいっw訳がガタガタになりそうだが。
>「最終的には」ここに入れます。 ってことは自分の手柄にするのが目的なんだろ。
ちょいと細かいことで、お聞かせ願いたいのですが、 共通な定数ってどこに書いたらよござんすか? 今は、コントローラーから参照するものはapplication_controller.rbに書いているんですが、 その他からも参照するようなときはどこに書いたものかと…。
>>543 のサイトの本人でございます。
親切な方がメールでこのスレで紹介されたと教えてくれました。
成果を独り占めする気はございません。
最終的には本家に入れば良いと思っています。
もちろん日本語版翻訳協力者のリストを付けるべきだと思っています。
過去スレから見つけてきた。
Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/792-796 792 名前:nobodyさん[sage] 投稿日:2008/08/18(月) 22:54:04 ID:???
RAILS_ROOT/libが $: に含まれてるからそこにおけばいいんじゃない?
名前をお約束通りに付けておけばconst_missingを捕まえて勝手にrequireするし。
795 名前:791[sage] 投稿日:2008/08/19(火) 23:50:18 ID:???
>>792 >>793 レスありがとう。
今はlibの下に置いてApplicationControllerでincludeしてるんだけど、「お約束通り」の命名にすればそれが不要ってこと?
定数名にRailsの命名規約があるの??
796 名前:nobodyさん[sage] 投稿日:2008/08/20(水) 08:25:05 ID:???
定数というか、モジュール/クラス名がconst_missingのとき、
その名前をオール小文字/単語境界をunderscore化、ネストをディレクトリ
とみなしたファイルがrequireされる。
たとえば、いきなりinclude FooBar::Bazとか書いて未定義の定数を使うと、
require 'foo_bar/baz' される。
----------------
ということは、lib/以下に common.rb みたいなの置いてmodule Common内に定数を書き、
使うところで(ApplicationControllerとかで?)
include Common して、定義してある定数 Hoge を使うか、
Common::Hoge を直接使う、ということでいいんでしょうか?
定数をlib以下に切り出すってのはさすがに抵抗ある。 そこまで規約に従う理由があるのか?
定数Hogeの内容にもよると思う
>>552 $RAILS_ROOT/lib にクラスとかモジュールの実装を置くのは普通だと思うが、なんで?
rubyはクラスもふつう定数だがクラスは動的に書き換えられるのでなんか混乱するな。
これからRubyを覚えようと思うのですが、Rails使うには、Rubyが分かってないとダメですか?
libはあくまでライブラリじゃないの 自分で定義したものはやっぱりapp以下に置くのが自然に思うけど
lib/ は自分が書いたものの中で、Modelとか、Controllerとか、Helperとかに含まれないものを置く場所。 READMEに書いたある。
外部ライブラリはvendor/plugins以下に、自分が用意したものはlib以下に、って解釈でいいのかな?
>>558 vendor/pluginsはプラグインとして使えるように作られたものを置くところ。
自分でプラグインを作ってもOKなので、外部製とは限らない。
app以下はやっぱり
app/models(ActiveRecord::Baseのサブクラス)
app/controllers(ActionControllerのサブクラス)
app/helpers(ヘルパとして使うmodule)
を置くところであって、それ以外はlib/でよいだろう。
もとの質問の定数定義についてだけど、定数の名前が重要で値自体にさして
意味がない(互いに異なりさえすればよい)場合は 定数の名前に使う予定の
ものに相当するシンボルを使うことも一考に値する。
Rails pluginの管理はみなさんどうしてますか? RubyGemsで入るRaptというのを使おうとしたのですが、githubには対応してなさげ… githubのものでgemが作られてるものは、RubyGemsで入れればいいんでしょうけど、 小さいプラグインだとないものもあります。 script/pluginで手動管理でしょうか?
script/pluginだと何かまずいことがあるの? 個人的にはgemで用意されてるプラグインでも、汎用なものでなければscript/pluginでアプリケーションに個別に入れてる。
Rails2.3.2にはdispatch.fcgiがないのですが、fastcgi経由で動作させるためには どっかからdispatch.fcgiをコピーしてくるのでしょうか? ちなみに.htaccessもないもよう。
もう触れるなよ。どうせ聞きっぱなしなんだから。
おれもそう感じてた
566 :
562 :2009/07/04(土) 12:51:27 ID:???
販売か生産管理システム用のフレームワークってありますか?
Passenger(2.2.1)+VirtualHost使ってるのだが、 DirectoryIndex index.xhtml ってやってもきいてくれずに404エラーになる。index.xhtmlは間違いなくある。 VirtualHostとDirectoryの両セクションコンテナでやってみたのだが。 これどうにかならないだろうか。おれだけ?
2.0に対応したRails本少ないなぁ…英語勉強するしかないかな
rubyしっかり勉強してソース読むのが王道
いや、それは無いだろさすがに
572 :
568 :2009/07/05(日) 10:36:21 ID:???
トップページだけ対処ということでRewriteにしてしまった
railsのソース汚いよね。達人プログラマーでもあの程度なのかと思ってしまった。
David ThomasがRails自体を開発してるのか?Railsでの開発は好きらしいが。 まあ、口だけなのはわかってるけどなw
>>569 入門でいいなら、
・逆引き本
・Railsレシピ
・定番のAgile Web Development with Rails 3版を見ながらわからないところは、2版の日本語版を見る
俺はこんな感じで進めている。
>>574 汚いっちゅーか、黒魔術つかいすぎだと思う
rubyとしては見ては(ry
こんなパラメタ受け取りたいんだけど params = { :hoge => [ { :title => "タイトル1", :items => ["項目1","項目2",…] ] } 上手いやり方知らない? これだと上手くいかない <%= text_field_tag 'hoge[][title]' %> <%= text_field_tag 'hoge[][items][] %>
途中送信してしまった こんなパラメタ受け取りたいんだけど params = { :hoge => [ { :title => "タイトル1", :items => ["項目1-1","項目1-2",…] }, { :title => "タイトル2", :items => ["項目2-1","項目2-2",…] }, … ] } 上手いやり方知らない? これだと上手くいかない <%= text_field_tag 'hoge[][title]' %> <%= text_field_tag 'hoge[][items][] %>
railsのコード読んだけどインデントの規則おかしくない?
>>580 のエディタのtab幅の設定があってないとエスパーしてみる
>>581 Rails 2.3.2 だと、インデントにTABを使っている(grep '^TAB文字' で判断)のは
actionpack-2.3.2/lib/action_view/helpers/form_options_helper.rb
activerecord-2.3.2/lib/active_record/fixtures.rb
activesupport-2.3.2/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb
のみだった。
どこを見たのか知らないけど普通だと思うが
「おかしい」「普通」という感想だけじゃ話にならんな。
いや普通はいいじゃんw 多少の違いはあるかもしれんが、 ほとんどのプログラマは「普通」の感覚があると思うぞ。
タブ文字使って自力でインデントする習慣の人は 2文字じゃ困るって話じゃないかな
rubyでヲレ書式に整形するスクリプトでも書けば済む話。
仕事場でも未だにタブでインデントする奴いるけどすげー迷惑 とくに年寄りにその傾向があるようだ
Java でも C でもいいけど、超有名なオープンソースソフトウェアでも、
ソースはけっこう汚いこともあるよ(ロジックが汚いという意味ではない)
インデントとかコメントのルールとか、全然統一取れていないこともある
NTT 系の仕事だったら、NTT のやつらに絶対だめ出し食らうレベル
>>588 Linux(Unix)が開発環境となっている環境(CとかPHP/Rubyが多いかな)は、
・インデントはタブ
・vi なり Emacs で、タブ幅を4
を前提というかコーディング規約にしているところは多いね。
そういうのをWindowsのエディタや Eclipse で見ると崩れて見える。
(設定すればいいのだが)
んで、文句をいうと袋だたきにあう
どっちがいいか、というのではなく、文化というか習慣の問題だと思うが
>>589 # vim:set tabstop=2 shiftwidth=2 expandtab:
Rubyでviなら↑がデファクトスタンダードだと思うのだが。
知らんがな
規約にしてるのに設定しないで文句言うって馬鹿ですか?
viやemacsも、デフォルトのタブ幅は8のはずだから、 Windows使ってるから特別にデフォルトでも4タブが崩れないようにしろって主張は、 ちょっと意味がわからない。
>>593 タブ幅が8で許されるのはいつの時代だよw
手元のRuby 1.8.7だと大丈夫なのですが、サーバーの1.8.6環境だと おきるエラーがあります。 1.8.6系の問題でよくトラブるので、サーバーも1.8.7にあげる予定なのですが、 原因を知っておきたくてご相談します。 下記ソースの @sub_items = sub_items.all のところで、ログ見ると↓見たいに言われてます。 LocalJumpError (no block given): app/controllers/sub_items_controller.rb:5:in `index' 下記のようにすると問題なく動くのですが…。 @sub_items = @item.sub_items.all 以下、ソース (config/routes.rb) map.resources :items, :has_many => :sub_items (app/models/sub_item.rb) class SubItem < ActiveRecord::Base belongs_to :item end (app/models/item.rb) class Item < ActiveRecord::Base has_many :sub_items end
596 :
595 :2009/07/07(火) 18:08:13 ID:???
(app/controllers/sub_items_controller.rb) class SubItemsController < ApplicationController # GET /sub_items # GET /sub_items.xml def index @sub_items = sub_items.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => @sub_items } end end : # フィルタで必ず実行させる before_filter :must_item_present private def must_item_present @item = Item.find(params[:item_id]) end def sub_items @item.sub_items end 環境: Rails 2.3.2, 鯖: Ubuntu 8.04LTS Ruby 1.8.6, テスト環境: Windows XP SP3, Ruby 1.8.7
質問よろしいでしょうか? 複数のfixtureで共通するERBコードをDRYしてどこかに書きたいものなのですが、 どこに置いたものでしょうか? というか、fixture微妙につかいにくくないですか? みなさん、どうしてます?
598 :
597 :2009/07/07(火) 20:58:43 ID:???
上でも出てたけど、factory girl使えってことなのかあ・・・ factory girl使った場合、rake db:fixtures:load 相当はどうやったらいいいもんですかね・・・
599 :
nobodyさん :2009/07/07(火) 21:11:14 ID:i/gOlMKP
2.2なんだが。 view: <% for .... %> <%= check_box_tag('hoge_id[]',hoge.id) %> <% end %> 複数のチェックボックスを動的に生成しているこのチェックボックスを 一つは必須入力にしたいのだがvalidateがうまくいかない。。orz model: validates_acceptance_of :hoge_id ↑↓動作せず。。。 :model def validate if read_attribute(:hoge_id).nil? errors.add("nilnil") end エラーをみるとparamは hoge_id で渡ってきているのだが DBにhoge_idがないためチェックが通らない? (DBにはho_idという名前にしてある) hoge_id[] にするとNoMethodErrorだし。 助けて・・・m(__)m
600 :
nobodyさん :2009/07/07(火) 21:25:49 ID:QCi36J2S
Ruby 1.8.7 rails 2.3.2 test環境作ろうと gemで autotest-rails を入れたんだが、 使ってみると、色も無い、ポップアップもなくて殺風景なんだが、 にぎやかに error 教えてくれるものないかな?
Windows + Netbeans + RoR + CRuby + mongrel で
uri = URI("
http://localhost:3000/funyafunya/ ")
res = uri.read
こんなふうにすると uri.read で止まっちゃうんすよね。
mongrel が一度に一コネクションしか処理してくれないからっすかぁ?
やっぱ、そうっすよねぇ。
どうやったらぁマルチにできますか?無理っすかぁ。
>>601 どーしてもHTTP経由がいいなら、mongrelを複数立ち上げてロードバランサを前に置くか、passengerにするか。
HTTP経由でなくてもいいなら、render_component とか。
render_component はプラグインになったんで注意な。
603 :
601 :2009/07/08(水) 19:55:48 ID:???
別のプロジェクトにしますた。
ぽーとかえてにこたちあげればよかたね
昔 2.1.0 の頃に少し挑戦しました。
いまは 2.3 で、トランザクションのネストができると聞きました。
質問です!
トランザクションってControllerでするのでしょうか?
それともModelでするのでしょうか?
2.3 以前と以降で話が違いますか?
ついでにもうひとつお願いします。
ttp://webtama.jp/series/railstips/articles/31 「そうでなければ、ネスト処理は単純に
親トランザクションの一部として振舞います(Rails2.2の動作)」
↑これって、どういうことなのかわかりやすく教えてください。
2回目のトランザクションの開始と終了が無視されて、
1回しかトランザクションが処理されていないという意味でしょうか。
コントローラは処理の振り分け、 ビューは画面表示、 それ以外はモデルだと思えばいいよ。 一つに二つの質問は面倒。
ルーティングでコントローラーをネストした環境で、
url_forやbutton_toなどを使おうとしたのですが、
どのように引数を記述したものかわかりません。
どなたか、ご助言いただけないでしょうか?
例えば、/items/14/sub_items/45 のような場合は、
button_to("hoge", [@item, @sub_item]) のように記述すればいいのですが、
/items/14/sub_items/45/hage のようなアドレスにアクセスしたい場合、
どのように記述したものでしょうか?
button_to("hoge", :controller => [@item, @sub_item], :action => hage)
また、この辺のことを script/console で試してみようと、
下記のように script/console でurl_forなどヘルパーを実行しようとするとエラーが起きてしまいます・・・
script/console内でヘルパーをテストする方法 - yamazのRails日記 - Rubyist
http://rubyist.g.hatena.ne.jp/yamaz/20060818 >> helper.url_for :controller => 'items'
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.url_for
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_view/helpers/url_helper.rb:85:in `send'
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_view/helpers/url_helper.rb:85:in `url_for'
from (irb):55
from :0
RESTfulなルーティングを定義していれば、 item_subitem_path(@item, @sub_item) # or _url で。 consoleで使うには app.item_subitem(以下ry
609 :
607 :2009/07/09(木) 20:24:00 ID:???
>>608 ありがとうございます!
_path使って /items/10/sub_items/11 のようにはアクセスできるようになりました。
script/consoleでも動きました。
/items/10/sub_items/11/hage のようなアドレスですが、
Rails 2.3だと、:format指定でいけました。
item_subitem_path(@item, @sub_item, :format=>:hage)
ただ、
/items/10/sub_items/11.hage
というようなアドレスになってるんですが、大丈夫なのかなこれ…。
:formatは、URLで拡張子のように見えるところに使うという規約。 同じURLでも拡張子によってHTMLやJSONやXMLを返せるようにするためのもの。 hageの部分はそのままでは表せないので config/routes.rb に map.resources :items do |item| item.resources :sub_items, :member => { :hage => :get } end と書くと hage_item_sub_item_path(:item_id, :id) で /items/:item_id/sub_item/:id/hage を表せる。 この場合、 SubItemsController#hageが、HTTP Getで呼ばれる。
× .../sub_item/... ○ .../sub_items/... どういう規則が定義されているかは rake routes で。
hageはアクションじゃなくて単なるパラメータの1つだ、という場合は RESTfulなルーティングからそろそろ外れてくるので、独自に書く必要が 出てくると思う。 item.myaction 'items/:item_id/sub_items/:id/:para', :action => 'myaction', :controller => 'sub_items' とか指定すれば item_myation_path(item, sub_item, :para => 'hage') #=> /items/:item_id/i/sub_items/:id/:para
rake routes
614 :
nobodyさん :2009/07/10(金) 02:38:02 ID:UisZbpVA
>>490 ってエラーになるけど (paged_usersなんてメソッドないって)
原文ではなぜエラーにならないのか??
いまいちルーティングの書き方を理解できてない俺。
>>614 たしかに、
map.paged_users '/users/pages/:page'
だとエラーになる。
map.paged_users '/users/pages/:page', :controller => 'users', :action => 'pages'
みたいに書けば動く。
使うときは<%= paged_users_url(:page => 1) %>
(rails 2.2.2で確認)
クラス定義の変更の場合、developmentモードならリロードされる (config.cache_classes = false)ので、再起動の必要はない。 スタイルシートの狂いの視認とかでなければテストを書いて走らせるだけで済むかも。
>>616 Webrick使うのをやめてThinにする。
修正したらキャッシュ無効だから遅いのは普通。
>>616 developmentモードなら、修正ごとにサーバー起動する必要ないよ。
621 :
607 :2009/07/10(金) 16:58:44 ID:???
サンクス
>>612-613 rake routesでも確認してみています。
少し疑問があるのですが、
ネストしていない状態で、コントローラーにメソッド hage を勝手に定義して、
:action => :hage, :id => @item
のような感じでurl_forなどに渡すと、
>>612 のように定義しなくてもちゃんとルーティングしてくるのですが、
これは、config/routes.rbの中の下記記述によるものなのでしょうか?
map.connect ':controller/:action/:id'
そゆこと。
URLはそうなるけど実際にアクセスしたら resourcesで定義したshow呼ばれない?
624 :
607 :2009/07/10(金) 19:31:50 ID:???
うまくいったぁぁぁあfsりゅいゆjjきl 以下のような感じでうまく行きました。下記は、 /items/:item_id/sub_items/:id/hage のようにアクセスさせたい場合です。hage は getでアクセスするものとしてます。 (config/routes.rb) # /items map.resources :items do |item| # /items/:items_id/sub_items item.resources :sub_items, # /items/:item_id/sub_items/:id/hage :member => {:hage => :get} end (app/controllers/sub_items.rb) : # GET /sub_items/1/hage def hage respond_to do |format| format.html { redirect_to(item_sub_item_url) } format.xml { head :ok } end end (app/views/sub_items/index.html.erb) : <% @sub_items.each do |sub_item| %> : <td><%= button_to("ハゲる", hage_item_sub_item_path(@item, sub_item), :method => :get) %></td> : わかっている人には当たり前のことだと思うのですが、今日という日は、みなさま本当にありがとうございました。
盛り上がっているところ?失礼します。 セッションについてお聞きしたいのです。 webアプリ自身あまり慣れていない者なのですが、 「Agile Web Development with Rails」(3版)では、 セッションに複雑なもの入れんな(とかいいつつ、チュートリアルではクラスのインスタンス入れてたりしますが) とあったり、 「Railsレシピブック」では P83に なお、Rails 開発チームの見解としては、セッションに入れるデータは、 ユーザーのID(整数)とflash メッセージ程度にとどめることが推奨されています。 などとあるのですが、この辺の開発チームの見解はweb上でどこかに記述がありませんでしょうか? 参考にしたいのですが…
>>625 restful = state less = セッションにデータいれんな
sessionはcookieを使っているのですか
デフォルトはそう DBにもできるが個人的にはクッキーが好き
http://dev.rubyonrails.org/browser/trunk/actionpack/CHANGELOG?rev=6184 当時のchangelogのこれかな。
Sessions typically contain at most a user_id and flash message;
both fit within the 4K cookie size limit. <snip>
If you have more than 4K of session data or don't want your data to
be visible to the user, pick another session store.
Cookie-based sessions are dramatically faster than the alternatives.
セッションにはせいぜいUIDとflashくらいしか入っていないのが典型。
これはクッキーの4K制限に収まる。
4K以上入れたいなら他のストアを使おう。
クッキー使うと他より断然速いよ。
630 :
605 :2009/07/11(土) 00:14:10 ID:???
>>606 ありがとうございます
いつも疑問に思うのですが、コントローラーのメソッドAから
コントローラーのメソッドBが呼ばれることは少ないけど、
一方、モデルのメソッドCからモデルのメソッドDが呼ばれる
ことは多々あると思うんです。
それじゃあ、もしCがトランザクションを開始したかったら、
あらかじめDがトランザクションを開始していないことを
ソース追いかけて確認しないとダメなのでしょうか?
それに、Dだってさらに別のメソッドを呼んでいるかも…
C++でいう nothrow みたいに宣言できないのでしょうか?
notransaction とか?
入門書って何がいいかな? ・Ruby自体は習得済み ・インストールの方法をつらつらとコマンド並べて解説したりするのはいらない ・Webアプリの経験は無い ・HTMLは分かる ・1系を使う予定は無い 日本語じゃThe Ruby Wayがいいと思ったけどSimply Railsって良いのかな? あんまし英語難しいのは勘弁だが洋書が良いなら有りかなとも思ってきた。 Agile Web Development with Railsとかもどうなんだろ?
633 :
nobodyさん :2009/07/11(土) 09:06:59 ID:rxtHjZBV
rorに適したosってなあに? windows osよりlinuxの方が不都合が少ないとかなんとか
634 :
nobodyさん :2009/07/11(土) 09:41:45 ID:9PZL7n+0
Chrome OS
Windowsはrubyやwebアプリ自体に不向き
教祖が使ってるのはデビアンだっけか。 ror作者はマカだったかな? 運用は要求レベル次第。動けば良いなら好きなのでおk。
ようするにUNIXやその系統。
>>633 無難にUbuntuでいいんじゃないの?
インストール簡単だし、デスクトップも一番洗練されてる。
sudo apt-get install ruby1.8 rubygems1.8
sudo gem install rails
だけで開発環境できちゃうし。
WinやMacと比べても拍子抜けするほど簡単。
macはデフォでrailsはいってるけどな
Windows環境なのですが、 ruby -Ku script/server して文字コード指定しても立ち上がる mongrel 1.1.5のエラーメッセージがSJISになってしまうのですが、 これ何故なんでしょうか? コマンドプロンプターには都合はよいと思うのですが、強制する理由(というか仕組み)がわからない… UTF-8前提のIDEとかから立ち上げると、激しく化けたりして困る
>>633 Windows に vmwareでUbuntu入れるか、andLinuxかcoLinuxか、Portable Ubuntu入れるか
って、前も書いたようなキガス・・・
642 :
633 :2009/07/11(土) 18:00:12 ID:???
みなさまサンクス vmwareでubuntuを使うようにします
Heroku使おうと登録してみて開通まで言ったけど。 オレが作ったアプリ軽く5Mオーバーだったw 無料じゃ仕えねぇ-w
PHPなら無料でもっといい環境がいくらでもあるよ
>>644 ここはRailsのスレなのに、PHPの話を持ち出しても意味がないだろ。
PHPなんか使いたくないから、Rails(Ruby)を使ってるんだよ。
646 :
nobodyさん :2009/07/13(月) 03:35:00 ID:Bzbq9kj3
xrea.com
>>646 xrea今まずいよ。クラック問題まだ解決してないはず
ついでに少し質問。 rakeだか、rspecだか遅いrails絡みのコマンドを早くするコマンドがあったはずなんだけど、 忘れてしまった… どなたか覚えていませんか? 後ろに立ち上げておく類のものだった気がするんですが・・・ rake 高速化、rspec高速化とかでぐぐっても出てこない(´・ω・`)
649 :
648 :2009/07/13(月) 18:15:39 ID:???
いろいろ検索したらでてきた。 dRubyですた。サンクス…
attachment_fu(:file_sysytem)を使用したプロジェクトで 運用開始前に予め画像を入れておきたいのですが script/runnerでPhoto.new({"uploaded_data" => open('hoge.jpg')}) するとattachment_fu.rb:343でuploaded_data= undefined method '[]' してしまいます。 同じようなことをしたことがあるという方、おりましたら教えてください。 環境は linux ruby 1.8.7 rails 2.3.2
651 :
650 :2009/07/14(火) 00:39:43 ID:???
ごめんなさいREADMEに書いてありました・・・
>>653 kwskも何も、今からxreaはねぇだろ。クラック以前に
ドメイン契約しても無償サーバ空いてないこと多いし、
鯖がダウソしてるのに放置、メールサーバは海外で
spam鯖指定されてたり、慢性的に落ちてたり。
有料サーバを借りられないくらいの プログラムを作るお前らには PHP で十分
>>656 どうしてそんなふうに他人を見下せるんだ?
金銭的な余裕のあるなしとRubyで開発をすることの間には何の関係もないのに。
656 が構って犬なら、 年数千円、数万円が払えないのは負け犬。
じゃあお前はrubyで開発するだけのためににわざわざ年間数万円を払うわけだな。
当然。数万なんてすぐに回収できる。 数万も払えないヘボは PHP 使ってろ。
はいはい、わろすわろす
負け犬の遠吠え、乙
作る側より、発注する側のほうが100倍勝ち組という現実に気づけ。
自前だとサーバ代、電気代、ハードウェアの交換、メンテナンス代などなどで 数万円じゃ済まないことに気付け、低能。Ruby ユーザってこんなのばかりなの?
PHPでも無料サーバーはションベンスペックで、 多少人気が出るときついのだが。 格安サーバーで事足りるのはうらやましい気がするが、少し気の毒でもあるな。 そういうことが分からないということはサービスを公開したことなんてないのだろう。
>>667 書けば書くだけ無知とバカぶりをさらけだすだけですよ
Rails の無料サーバがないために サービスすらはじめられない人が何を言っているんだ…
671 :
667 :2009/07/14(火) 14:55:41 ID:???
おれはが
>>667 以前に書いたのは
>>652 だから、
書けば書くほどというのはおかしいだろう。
ID出ないから仕方ないが。あと連投ならやめれ。
あほか
>>667 は悔しくて言ったの?
本気で言っているの?
お前らどんなサービス提供してるの?稼働してるならURL貼ってよ PHPでもRailsでもどっちでもいいよ 俺は提供してるサービスなんて無いから無理
こーゆー所に貼っても叩かれるだけだろ ばかか
Rails じゃ無料サーバがなくて分からないだろうけど、 一度、無料サーバで PHP でも Perl でも何でもいいからはじめてみろ。 月刊数十万アクセスは捌けるし、数千円から 1, 2 万円くらい行けるぞ。
678 :
676 :2009/07/14(火) 15:16:07 ID:???
>>676 月刊→月間の間違えな。
1 年で 5 万円以上稼げれば
格安サーバ借りて、さらにアクセスさばければ
2, 3 倍稼げたりするよ。
ここでは URL 貼れない。
アフリを潰すような奴もいるし。
PHP か Perl か Rails か以前に、 月に数十万もアクセスが来てくれるようなサイト、コンテンツを作れるかどうかが 問題なわけだが
Rails は無料サーバがないから、 そもそも Web サービスがはじめられないわけだが
じゃあURLはいいからどんなサービスなのか教えてよ アップローダ?ブログ?SNS?それとももっと先進的な何か?
難癖つける気、満々ですな。 Ruby ユーザって人格障害者多いね。 そんなことを気にしないで自分が作りたい Web サービスを無料サーバを使ってどんどん作りなよ。
俺は情報提供サイト。 自分の好きなのや、興味のあるものを。 非 IT やオタクじゃないのをターゲットにすると アフリをクリックする傾向あるね。 まずは無料で Web サービスをいろいろ作って 試行錯誤して経験値を積むのが重要。 PHP/Perl で作るのに飽きたので Rails で、 と思ったけど無料サーバのない現状にゲンナリ。
作りたいサービスなんて無いよ?そもそもRailsいじってないしね ただWebアプリで儲けてるって人がどんなサービス提供してるか気になってさ で、どんなサービスなの?
字の読めない人がいる。。。
もしRailsプレインストール済の無料レンタルサーバーがあれば みなさん使いますか? どのバージョンならいいですか?
Rails はバージョンによって互換性がまったくないから 長期間運用すると、ユーザによって バージョン変えるな、新しくしろ、と大変そうw あと Passenger って何百日安定稼働!ってないよね。 毎日 cron で早朝リブートしてる…。 Passenger がもっと安定して、 省メモリ、高速になったらしい Rails 3.0 からが 運用側としてはいいのかなぁ。
それ以外に Ruby が 1.8 か 1.9 か、という問題があるよね。 PHP/Perl は Ruby に比べて互換性の問題が小さい。 あと、必要メモリも 1/2 〜 1/3 で済むのでサーバ提供者は無料提供可能。 なので現実的に Ruby 1.9 & Rails 3.0 が安定してからの提供になるんだろうな。
>バージョン変えるな、新しくしろ、と大変そうw >それ以外に Ruby が 1.8 か 1.9 か、という問題があるよね。 各バージョン毎の無料サーバーが立ってて同時に複数借りられれば 問題なさそうですね!
> 問題なさそうですね! > 問題なさそうですね! > 問題なさそうですね!
>>691 とびっきり残念な Rails ユーザがいるのは事実だけど、全員ではない。
IDないから自作自演かもしれない。
いずれにしても煽られるくらいの存在になったというのは 裏を返せば市場が広がってるということなんで嬉しい話。
無料 Rails サーバがない程度の市場かよ
xrea
また基地外が現れたのか。 半角の前後にスペースがきっちり入ってるからわかりやすいな。 定期的に荒らすのはなんかのバイオリズムか?ちゃんと薬は飲めよ。 ぶつぶつ一人で会話して、ヒッチコックのサイコかよ。
そもそも儲かる見込みのサイトをrorで作れるなら、有料専鯖でも良いじゃないかと。 無料じゃないと困る様なへぼサイトならみんなと同じphp使ってろと。 儲かる仕事作れないのに、高額のマク強請るマカみたいなスレだ。
このスレに足りないもの それはスルー緑
> 半角の前後にスペースがきっちり入ってる 初心者スレも本スレもこれで判定してたのに おまえ・・・
>>695 無料サーバがない≠市場がない では?
無料鯖がないのは、Rails を動かす場合、
Passenger なり Mongrel なり、一アプリにつき一ポート使うからだと思う。
だからVPSなど、有料でroot権限もらえるとところだったら
Passenger や Mongrel を好きなだけ動かせるだろ。
(VPSだと、安いプランだとメモリが大変だけど)
Java だって Servlet を動かすには Tomcat などが必要だが、
一 Tomcat につき 一ポート使うから、無料サーバではやりにくいだけの話で、
Java による web アプリは、全然マイナーな技術ではないよね。
(レンタルサーバでやるようなものではないけど)
一方 perl や PHP は Apache の中に組み込まれるから(mod_perl、mod_php)、
各ユーザが PHP アプリを動かしてもポートは新たに消費しない。
だから無料鯖でも使われるわけで。
※
レンタルサーバで、あらかじめ Passenger がサーバにインストールされていて、
そのユーザのホームに .hoge (任意のファイル名) を置いておくと、
毎朝の root の cron で httpd.conf に RailsBaseUri の行を追加してくれ、そのあとは
http://{サーバ名}/~{レンタルサーバのアカウント名}/ で Rails アプリが動く、
なんてサービスがあったら、レンタルサーバでもポートを増やさずに
Rails アプリを動かせる、なんてことができていいかも。
cronにしなくてもhttpd.confにRailsBaseUriを追加してくれる Webな管理画面があればいいですよね。 Passengerけっこう落ちるって噂ですが。 1. フレームワークがでかいから潤沢なメモリが必要 2. Rubyがそもそもメモリを食う 3. PerlやPHPではでかいフレームワークつかわないから軽いだけ どれなんですか。 勘で1かと思ってます。
3
全部。さらに追加 4. 情報不足とそれに関連した使用者のスキル不足 5. まだあまり枯れてない
とりあえず目くそ鼻くそを笑う程度の連中だな。
>>701 >Tomcat につき 一ポート使うから
無知乙。mod_jkとかAJP 1.3てな単語でまずググレ。
javaが無料サーバでやらないのはVMがメモリ食いすぎるのと
javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。
要は Rails 無料サーバは当分無理ということ
708 :
701 :2009/07/15(水) 10:30:33 ID:???
>>706 >>Tomcat につき 一ポート使うから
> 無知乙。mod_jkとかAJP 1.3てな単語でまずググレ。
Java は長い間やってきているから、そこら辺は把握しているつもりです。
mod_jk とか mod_proxy_ajp をつかって外部には Apache の port 80 で公開していたとしても、
mod_jk は内部で動かしている Tomcat の port 8009 にスルーするだけだから、
結局、各ユーザごとの Tomcat のプロセスの起動が必要で、
それごとに 8009 (AJP を受け付けるポート)の bind が必要だと思いますが?
あとひとつの Tomcat に、各ユーザの webapp をデプロイする方法も考えられるが、
Passenger は、RailsBaseUri ごとに、動くユーザを変えられるが、
Tomcat は変えられない。
$CATALINA_HOME/webapp/foo アプリは foo ユーザ、/bar は bar ユーザで動かす、
ということができない。
> javaが無料サーバでやらないのはVMがメモリ食いすぎるのと
> javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。
ここは同意する。
Passengerが1アプリで1ポートか。すごい使い方だな
何か違う気がする。 perlやphpでも巨大なライブラリ使う事も出来るけど、もうそれはapacheごと重くなっても構わないって割り切りがあるから。 実際、phpとかperl使ってるサイトは重いし。 rubyは小賢くmod_rubyで重くなるほうに実装しなかっただけ。共用鯖で、はた迷惑になるのを覚悟でどんどん重い実装をしていけば、レン鯖でも通用するとは思う。
>>708 じゃあapacheは何故80番だけで多ユーザに対応出来るんだ?
MySQLも3306のみ、postgresも5432だけで多ユーザに
対応しているぞ。そこを考えろ。長いっつっても無駄に
長いとVBプログラマー(笑)と変わんなくなるぞ。
お前さんの根本的な間違いは、Tomcatは1ユーザに1ポート
与える必要がある、と考えていること。80から8009に流そうが、
外部に公開するのは80番だけでよいから、利用者はそこで
Tomcatが動いていると意識する必要はない。それと
TomcatはTomcat上でのマルチユーザー(Not UnixUser)に
十分対応している。なんでPassengerと比較するんだ?
共有PHP鯖でマルチユーザのWEBアプリが十分動いてるだろ。
つーか実際に単独Tomcat1鯖で複数ASPの稼動実績あるしな。 ま、机上の空論で無理無理と考えてるから前進出来ない。
railsの無料干すと少ないけどいくつかあるだろ PHP使うとかマゾすぎんぞ
GAE/Java/JRuby
716 :
nobodyさん :2009/07/16(木) 15:59:36 ID:4+d1h2nC
でもさPHPは格安プランだとCGIモードの場合が多くない? PHP moduleの場合は企業向けプランだったり。
334 :可愛い奥様:2007/06/26(火) 09:46:19 ID:raxdPvfD0 OLだった頃、会社で働いていた日本に超詳しいベルギー人が言ったことに納得してた。 日本文化は身内受けの凝り性文化だそう。 外国文化に負けまいとしているのではなく、 世に意図的にインパクトを与えようとしているのでもなく、 今ここにいる同じ価値観を共有する仲間からの喝采を浴びたいと考える。 その結果、同じものを志す者同士の「これすごいだろ、おもしろいだろ」合戦が始まり、 そこで生み出される物が自然と研ぎ澄まされていく。 でもその競争は、敵対的なものではなく、お互いを尊敬しあいながら、静かに深く進行していく。 そしてある日、偶然目撃した異文化出身の人間(外国人)から、 それがすごいものであることを知らされる。 ほとんどの日本人はその日が来るまで、自分たちが作り上げた物がすごいものとは知らない。 もろもろの伝統文化、芸能、電化製品、アニメ、他、みんな同じパターンで世界に広まっていった。 だから、日本がここまで発展してきたのも必然的なものだし、 この精神が衰えない限り、これからも日本は誰に頼まれることもなく、 知らないうちに勝手に世界にインパクトを与え続けていくだろうと。
チーム世耕、B層へのラーニング、乙
rubyもcgiで使えば良いだけの話。
> 3. PerlやPHPではでかいフレームワークつかわないから軽いだけ そうだよな。 CGIでもまともに動く軽量フレムワがあればいい。
one night
少し質問させてください。 request.remote_ip などrequestの情報をコントローラーではなく、モデルから取得したいのですが、 どうしたものでしょうか? コントローラー側から、引数で渡すしかないでしょうか? モデル側からコントローラーのインスタンスにアクセスする手段がある?とか(そうするとテストがやっかいそうですが…) Rails 2.3.2です。
>>720 それはありますよね。今だとSinatraでしょうか?
そもそも、Railsと比べるべきは、PerlやPHPなどの言語ではなく、フレームワークですよね
CakePHPとか十分重いですよね。もちろん、Railsよりもデプロイ等楽ですが、
無料レンサバのphpはCGI版という現実…
無料レンサバでRails動かしたいという人は、passengerついてるDreamhostのお試し期間で試してみたら、どうかな
Dreamhostも共有サーバーだけど、なかなかなしんどさで無料鯖でRailsやりたいという願望の非現実感が味わえますw
おれもRuby会議でシナトラ知ってこれかも。と思ったところ。
>>722 引数で渡すのが一番簡単だと思う。
あるいは、ApplicationControllerあたりでグローバル変数にrequestをセットするbefore_filterを定義とか。
けっこうRuby会議行っている人いるんだな。 おれも3日間いったが。 Javaから転校してきてまだ3ヶ月なんだけど、 Rails→超有名 Sinatra→次に有名、もはや珍しくない まではわかったけど、ほかにも有名なものってあるの? Java だと web フレームワークはたくさんあって選ぶのに困るぐらいだけど (もちろん、フレームワークによって得意とする局面はいろいろあるけど)、 Ruby の web フレームワークもそんな状況なのか、 それとも Rail と Sinatra ぐらいなのか? とりあえず merb と ramaze はRuby会議で知った。
>>711 板違いで申し訳ないんですが、以前から疑問に思っていたので便乗します。
> TomcatはTomcat上でのマルチユーザー(Not UnixUser)に
> 十分対応している。
というのは、tomcat-users.xmlで管理するという意味ですか?
だとするならば、それはUnixユーザー並みに、ユーザーごとに分離独立で
管理できるのですか?
それから、
> javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。
ということは、例えば、webapps下の別ユーザーが管理するアプリの
ディレクトリ下を書き換えたりできてしまう可能性がある、
ということですか?
上記等から、レンタルサーバ屋さんは基本的に1ユーザ1Tomcatであるべき、
と考えているということなんですか?
728 :
nobodyさん :2009/07/21(火) 15:42:40 ID:rQ1yXsK1
お聞きしたいことがあるのですが、 とあるテーブルのidが求められていた場合、 ある条件下(例えばデータ生成順)においてそのidのデータが何番目にあるのか?というのを求める方法はないものでしょうか? また、ActiveRecordでそれはどのように書いたものでしょうか? 例えば、id=1234が :order => "created_at asc" という条件で検索した場合に何番目なのか?という話です。 Rails 2.3です。
730 :
nobodyさん :2009/07/21(火) 22:41:56 ID:fpo5xh0M
>>729 ありがとうございます。
created_atが同じ場合に問題が出そうです…。
とりあえず、こんな風に書いてみました。かなり富豪的ですが、アクセスは少ないのでいけるかな?
item_id = 1234
item_number = Mode.find(:all, :order => "created_at asc", :select => "id").index{|x| x.id == item_id } + 1
穴がないか、心配ではあります。
731 :
nobodyさん :2009/07/21(火) 22:43:48 ID:fpo5xh0M
>>730 ですが、いきなり
>>730 の例は Mode.find(:all で富豪的すぎますが、
実際には、:conditions => ["hoge_id", hoge] みたいに、要素を絞って使ってますです。
732 :
nobodyさん :2009/07/21(火) 22:44:29 ID:fpo5xh0M
ヽ(`Д´)ノ ウワァァン!!ミスばっかりだよ x :conditions => ["hoge_id", hoge] o :conditions => ["hoge_id = ?", hoge]
値が同じなら、ソートしたときその値の集団のどこに位置してるかは 「たまたまそうなった」以上の意味はない気がする。 最後尾の位置は、比較を <= にして +1 なしにすれば求められるな。
まあ、理想を言えばSQLのテーブルは、「表」というより「集合」 だからな。順序という概念はあまり相性がよろしくない。 ORDER BYは列の整列というより取り出し順だし。
RailsでGoogle Mapsを利用するには何が良いのでしょう? 何となくYM4R/GMが良い気がしますが、ほかに何かある?
ok
gettextを利用すると、ビューでヘルパーメソッド(number_to_currency) が機能しなくなりました。 gettextは利用しないほうがいいんですかね? 対応策があれば教えてください。 [環境] rails 2.3.2 ruby 1.8.6-p287 Ruby-GetText-Package-2.0.4
試してみたが確かに整形されないな。 script/console >> helper.number_to_currency(1000) => "$10,000.00" にはなるのだが…… number_to_currencyのようなヘルパはRails標準のI18nフレームワーク を利用しているので相性が悪いとは思う。 gettext的にはビュー上は <%=h(_('$%.2d') % price) %> のように出力しておき、日本語なら '%d円' になるようにメッセージ カタログを用意するのだろうね。
1000→10000 適当に脳内修正よろ。
>>738 ありがとうございます
う〜ん。悩みますね。
まぁ仕事で利用しているわけではないんで、
色々試してみます。ありがとうございました。
URL引数で ?lang=en のように明示してやると表示出来た。 ということはきちんと初期化しれやればうまくいくはず……
アプリ作成 $ rails _2.3.2_ testapp 適当なモデルを作ってレコードを作成。 $ ./script/generate scaffold Book title:string author:string price:integer $ rake db:migrate $ ./script/console >> Book.create(:title => 'Untitled', :author => 'Anonymous', :price => 10000) number_to_currencyを利用 $ vi app/views/books/show.html.erb <%=h number_to_currency(@book.price) %> GetTextの使用 $ vi config/environment.rb config.gem 'locale' config.gem 'locale_rails' config.gem 'gettext' config.gem 'gettext_activerecord' config.gem 'gettext_rails' I18n FWの初期化 $ vi config/initializers/locale.rb I18n.supported_locales = %w(en) I18n.default_locale = 'en' でフォーマット出来た。
>>742 おお〜〜〜!!
やってみたら私もフォーマットできました。
これでgettextと併用できます。
ありがとうございます。
国際化というかメッセージの日本語化は、やっぱりgettextをみんな使ってるのかな? 自分の場合は、i18nのほうが分かりやすいと思ってるので、i18n_generatorsでymlを生成してます。
745 :
nobodyさん :2009/07/26(日) 09:25:57 ID:VPPSkKB9
ちょっと聞きたいんだけど、お前らのところでこれどのくらいかかりますか。 (Windowsスレでレスもらえなかったのでこっち着ました) $ time script/runner "puts 'hello'" hello real 0m16.309s user 0m0.015s sys 0m0.015s $ time script/runner "puts 'hello'" hello real 0m12.124s user 0m0.000s sys 0m0.030s 環境:Windows Vista SP2, Ruby 1.8.7 Rail 2.3.2, CPU Core 2 Quad Q6600, Memory 2GB
下げ忘れスマソ
748 :
もうだめ :2009/07/27(月) 19:48:09 ID:???
#rake db:migrate rake aborted! Multiple migrations have the name CreateBooks #rake /usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" /usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" Errors running test:units! てな状況なんですが、ヒントくれませんかー?mysql ruby gems rails は最新verです
>>748 >Multiple migrations have the name CreateBooks
読める?
Migration classの名前を重複しないようにする。
おおかた XXXX_create_books.rb をコピーして、クラス名を変えずに
中身だけ変えたんだろう。
750 :
もうだめ :2009/07/27(月) 22:09:13 ID:???
>>749 ありがとう。素人には難しいね
今、全部アンインストールしてやり直してるところだから
後でまたやってみるよ
751 :
もうだめ :2009/07/27(月) 23:27:06 ID:???
できた! ありがとう
なにかちゃんと一冊ror本読んで基礎から積み上げたほうが良いよ。
>>747 すまない。マルチするつもりはなかったんだ。一言向こうに書くつもりだった。すまなかった。
map.resources :payments で定義されるルーティングが先にマッチするからでしょう。 rake routes でルーティングを確認しましたか?
758 :
755 :2009/07/31(金) 18:15:37 ID:???
>>756 ,757
ありがとうございます。
rake routes の結果より
payment GET /payments/:id(.:format) {:controller=>"payments", :action=>"show"}
が優先的にきいてるようです。
:action => "list" が存在しない場合だけ上記が適用されるようにしたいのですが、可能でしょうか?
:action => "list" が存在しない場合だけ の意味がよくわかりませんが、 map.resources :payments より前に map.connect '/payments/list' { :controller => "payments", :action => 'list' } を書くというのが、やりたいことじゃないかと思います。 controller が payments だけじゃなくて、しかも list メソッドが定義されていない場合は マッチしないでくれ、という場合は… :id のフォーマットを正規表現で限定する機能が使えるかもしれません。
760 :
754 :2009/07/31(金) 18:39:13 ID:???
いろいろやってたら、Authlogicとacl9で上手く行きました!
> ↓こちらではSubject modelでacts_as_authorization_subjectを書くとかなっててどっちなの?という。
メインの関連するモデル(Authlogicの場合User)は acts_as_authorization_subject の方でいいみたいです。
> それと、結合テーブル作らないといけないみたいなのんですが、
> migrationするroles_usersはモデルも作る必要あるんでしょうか?
必要なかったです。
lib/ruby/gems/1.8/gems/be9-acl9-0.10.0/lib/acl9/model_extensions.rb などを見ればわかるのですが、
acts_as_authorization_subject で、
has_and_belongs_to_many :roles, :class_name => role
を呼んでおり、(Authlogicの場合)UserとRoleを多対多で関連付けているみたいです。
しかし、この多対多のhas_and_belongs_to_many ですが、下記サイトを見ると
Ruby on Rails - ActiveRecord - ? ありえるえりあ
http://dev.ariel-networks.com/articles/workshop/rails-activerecord > * has_and_belongs_to_many (HABTM)
> :through 登場以降の存在がいまいち不明なので無視します。
とかあるのですが、これって今は使わないんでしょうかね。
とにかく、おさわがせしました。
ありがとうございました。
使えないわけではないが、いろいろ扱いが面倒。 has_many :throughだと、テーブルの関連自体をオブジェクトとして 扱えるので何かと便利。
762 :
nobodyさん :2009/07/31(金) 20:33:56 ID:TkoSwHP8
>755の貼ってるURLクリックしたら画面が表示されてびっくりした。 paymentsって結構一般的なんかな。
763 :
755 :2009/07/31(金) 22:15:57 ID:???
> 759 やはりそうするしかないですね ありがとうございます
764 :
nobodyさん :2009/08/03(月) 08:55:54 ID:OSViAr5u
質問です。 クッキーストアなセッションを盗聴もしくはXSSによって盗まれた場合、 そのセッションを無効にするには secret を再生成するしかないという理解なのですが、 あってますでしょうか?
無効にしても、再びxssで正規セッションから誘導出来るので根本対策に成らないと思うが。盗聴も同じ。また盗聴されれば(ry 番号札取られて順番待ちに横入りされまくってる状況をなんとかしないと。
>>764 そのセッションをと書いてあるだろ。xss気づいた時点で直すだろう。ただ直しても過去のセッションは生きてるから、過去のセッションを無効にしたいってことだろ。そもそも偉そうに言う前に答えてからにしろ。
で、答えは、私も解らん。
もちろんsecret変えれば、無効になるが、それ以外にないかって言われると…。
767 :
764 :2009/08/03(月) 11:50:48 ID:???
>>765 , 766
レスありがとうございます。
secret を再生成するとログイン中のユーザーを強制ログアウトしてしまうので、
それ以外の方法はないのかなーと思いまして。
そもそもクッキーが盗まれないようにしろよって話なんですが
768 :
764 :2009/08/03(月) 12:03:13 ID:???
クッキーが盗まれないようにするには、 XSS に対して => アプリ側で穴をふさぐ 盗聴に対して => 通信内容の暗号化 => 全面的にHTTPS ということになると思うんですが、世の中見渡しても全面的にHTTPS な Webサービスって少ないですよね。これって そこまでせんでもええやろ ってことなんでしょうか? なんだか XSS に対してはやたらうるさく言われる割に、 盗聴されるとクッキー盗まれるからHTTPSにしなさいってのは(XSSと同じ被害が出る割に) 随分とトーンが弱い気がします。
Https だと web サーバに負荷が掛かるからでしょ アクセス数が超多い人気サイトだと、SSLアクセラレータを前に置いたりするが、 それでも処理が捌けなかったり、そもそもそんな金があるなら別のところに使いたい。 携帯サイトだと、毎回 Https のダイアログがあるのは嫌われる。
770 :
764 :2009/08/03(月) 13:01:19 ID:???
>>769 > Https だと web サーバに負荷が掛かる
> 携帯サイトだと、毎回 Https のダイアログがあるのは嫌われる。
お金や個人情報を扱うクリティカルな処理でない限り
コスト・利便性が優先ってことでしょうか。
その辺のバランス感覚がよくわからんす。
盗聴のリスクを過大評価してるんですかね?>自分
771 :
769 :2009/08/03(月) 13:07:16 ID:???
>>770 > お金や個人情報を扱うクリティカルな処理でない限り
> コスト・利便性が優先ってことでしょうか。
まさにバランスだが、そこら辺は難しい。
どこかのセミナーで聞いたけど、セッションハイジャックがおきても、
本当に致命的な情報は盗まれないように設計すべき、というのを聞いた。
たとえばヤフー(さらにたとえればヤフオク)は、入札する直前に、もう一度パスワードを入力させる。
パスワード変更画面へアクセスするときにもパスワードを入力させる。
つまり、攻撃者がクッキーを盗んでセッションに入り込んだら、何でも出来てしまうようではダメ
(ユーザの情報を、何でもセッションに入れてしまうようではだめ)ということ。
ちゃんと考えられたサイトでは、ログインとか決済画面は Https で包んでいても、そうでない画面は
Http だったりする。
772 :
764 :2009/08/03(月) 13:43:20 ID:???
>>771 > ちゃんと考えられたサイトでは、ログインとか決済画面は Https で包んでいても、
> そうでない画面は Http だったりする。
自分が利用しているサービスは大抵そうなってますね。
そのことは実は前から気になってて、いくらログインが https でもこれじゃ
セッション乗っ取られるやんと思ってたのですが、これって仮にセッションが
乗っ取られても(被害0という訳ではないけれども致命的という訳でもない)
なんとかフェールセーフだからこうしますってことなんですね。
なんつーか、そういうもんなんですね、世の Webサービスというのは。
勉強になりましたっす。
773 :
764 :2009/08/03(月) 14:37:17 ID:???
>>764 > クッキーストアなセッションを盗聴もしくはXSSによって盗まれた場合、
> そのセッションを無効にするには secret を再生成するしかないという理解なのですが、
> あってますでしょうか?
自己レス
ログインの度に更新されるトークンをユーザーのモデル属性に追加して、
それをセッションハッシュに含めるようにすれば、例えセッションクッキーを盗まれても
正規ユーザーのログインと同時に無効にできますね。
クッキー総当たりもあるしなあ。盗まなくても全部試せばってのもある。 正規ユーザのログインを阻害しておけば、いつまでも取得したクッキーで成り済ませるというのもどうかと。
775 :
764 :2009/08/04(火) 00:18:20 ID:???
>>774 > 正規ユーザのログインを阻害しておけば、いつまでも取得したクッキーで成り済ませる
パスワードとメールアドレスの変更さえ阻止できれば正規ユーザーのログインが
阻害されるということはないという認識なんですけど、この場合のログインの阻害とは
物理的にログインできない状態にさせるということですか?
つまり、クッキーを盗んだ犯人が正規ユーザーの知り合いかなんかで、言葉巧みに
しばらくそのサービスにログインしないように仕向けるとか
ActionController::HttpAuthentication::Digest でDigest認証をする場合、 functional test はどうやればいいの?
プラグインが動いたとき、いつも「おーすげー」といってしまう
779 :
755 :2009/08/05(水) 00:30:31 ID:???
select("foo", "bar", {1 => 1, 2 => 2, ....., 20 => 20}) と、数字を20まで表示させたいのですが、ループなどを組んで指定するにはどうやったらいいのでしょうか?
>>779 opts = {}
(1..20).each {|i| opts[i] = i }
みたいな感じでハッシュを作ってそれを select に渡したら?
>>780 Hash[(1..20).map{|e|[e,e]}]
や
(1..20).inject({}){|r,e| r[e]=e;r}
なら、その場に書ける。
>>781 前者は古いrubyだと動かないんじゃないか?
>>782 1.8.6だとアンドキュメンテッド(というかドキュメント化を忘れられ)
だが、動く。
784 :
783 :2009/08/05(水) 09:04:35 ID:???
動くと思ったが、Hash[*(...)] でないとうごかなかった。 ごめんなさい。
>>779-784 みなさまどうもありがとうございます
教えていただいた方法全て試したのですが、
<option value="16">16</option>
<option value="5">5</option>
<option value="11">11</option>
<option value="17">17</option>
のような結果になりうまくいきません。
なんか難しそうです。
やりたいことは select 'foo', 'bar', 1..20 でたぶんできます。 確かに select の第3引数は Enumerable なら何でもいいけど、 基本的には Hash じゃなくて Array の Array を渡すものと考えといた方が良いよ。
787 :
nobodyさん :2009/08/05(水) 11:33:58 ID:NCOUlOL5
validates_length_ofってなんでバイト数じゃなくて文字数を見るようになったの? バイト数の方がよかったんだけど・・ この仕様しらなかったせいでバリーデーション不備のまま本番にあげちゃってちょん切れたデータを多数テーブルに格納してしまった・・
mysqlだとtextとstringで違うとかもあった
789 :
780 :2009/08/05(水) 12:16:04 ID:???
>>786 そのやり方でできました!
ありがとうございます。
map.resource(s)で定義されるRESTfulなルーティング規則で呼び出される アクション(indexとかshowとか)に対して、before_filterで、実行予定のア クションが - コレクションのアクション(index, newなど) - メンバーのアクション(show, destroyなど) のどちらなのかを判断する方法はないでしょうか。 標準のscaffoldで作られるもの以外にも対応したいので、 - index/new/createならコレクション - show/edit/update/destroyはメンバー という判定は避けたいです。 idパラメータの有無で判断するのが簡便に思えますが、誤判定の可能性 はないでしょうか。
792 :
777 :2009/08/06(木) 00:16:21 ID:???
>>777 テストのときだけ認証をスルーするようにした。
>>791 action_name 見りゃいいだけじゃ?
insert_html で、javascriptのコードをevalした結果を insertしたりとかでけんのですかね? いろいろと試してはみたのですが。 insert_html 'hoge', :bottom, :js => 'fuga' とか。
id以外にメンバを指定する方法を実装したら それをどんどん判定条件に加えていけばいいような。
コレクションに対するアクションなのか、メンバーに対するアクションなのかは アクションの実際の動作によるとしかいえないので、アクションの動作を 調べないかぎり誤判定はありえるでしょう。 つまりはコレクションかメンバーかは規約によるので、restという規約なら アクションは予め決まっているので、それをaction_nameで判断すればいいのでは ないでしょうか。 restのアクション以外を実装するケースを判断するには、そのアクションの対象が コレクションかメンバーなのかは実装者にしかわからないでしょう。
resoucesメソッドの :collection => とか :member => とかを見れば どうかと思ったが、その場でルーティング判定コードに変換されたらど こにも残ってないな。
800 :
nobodyさん :2009/08/06(木) 22:34:44 ID:U5nTdGUe
受信者のタイトルの文字コードをまず書いてね。
802 :
799 :2009/08/07(金) 04:13:16 ID:???
803 :
799 :2009/08/07(金) 04:24:05 ID:???
ちょっとお聞きします。 form_forの <%= f.error_messages :header_tag => :h3 %> のようなこういったコードを共通化したいのですが、どうするのがスマートでしょうか? ヘルパーに引数でfを渡すのも考えたのですが、できれば、既存の <%= f.error_messages %> で自動的に <%= f.error_messages :header_tag => :h3 %> 相当を呼ぶようにしたいのですが、よいはっく方法はないでしょうか?
そのコントローラのヘルパで、form_forを再定義して error_messagesを再定義するようなモジュールをmixinすればいいんじゃない?
806 :
804 :2009/08/08(土) 10:15:54 ID:???
>>805 ありがとうございます。
うまいこと、再定義する方法ってないものでしょうか?
下記のようにすると、stack too deep?とか言われてしまいます。
module ActionView::Helpers
class FormBuilder
# デフォルトオプション付きの f.error_messages
alias :old_error_messages, :error_messages
def error_messages(option = {})
old_error_messages({:header_tag => :h3}.merge(option))
end
end
end
今はとりあえず、別名で定義してみてあります。(grep置換してしまえばいいと言えばいいのですが…)
module ActionView::Helpers
class FormBuilder
# デフォルトオプション付きの f.error_messages
def my_error_messages(option = {})
error_messages({:header_tag => :h3}.merge(option))
end
end
end
807 :
804 :2009/08/08(土) 10:17:37 ID:???
さあああ、form_forをヘルパーで定義して、 以前のform_forを直接読んでやればよいのか…。 ちょっとやってみます。
>>806 なんていうか、既存のクラスを弄ってしまうのはなんかイヤなので、
class HogeHelper
途中投稿orz…… class HogeHelper module HogeBuilder def error_messages options super {:header_tag => :h3}.merge{option} end def form_for record_or_name_or_array, *args, &proc super do |f| f.extend HogeBuilder yield f (ry というのを考えてたんだが。
それがRubyの醍醐味じゃないか
インスタンスにmixinとかいうのも それはそれでRuby的だよね
DBが2台あって、通常は1台のほうにアクセスし、 障害があったときにもう1台に切り替えるってできるのですか? DBa, DBbで、普段はDBaのみに更新、参照し、DBaに障害があったら DBbに更新、参照みたいな。 JavaのときはJDBCの接続のときに以下のようにするとできたんだけど、 Railsでもやりたいのです。 jdbc:mysql://DBa,DBb:3306/testdb Properties prop = new Properties(); prop.put("autoReconnect", "true"); prop.put("roundRobinLoadBalance", "false"); prop.put("failOverReadOnly", "false"); ....
できる
814 :
nobodyさん :2009/08/11(火) 01:25:21 ID:VNj7FetZ
railsでするって表現はどうかと思う。 Railsで扱えるDB(Mysql, PostgreSQL, Oracle, ...)が 812のいう機能をサポートしていればできる。 んで、大体のDBでできる。
815 :
812 :2009/08/11(火) 11:43:12 ID:???
>>813 >>814 返答ありがとうございます。
MySQLでお互いをMaster&Slaveにして、デュアルマスタにしているのですが、
片方死んだ時に切り替えたく思っています。
スレ違いになりそうですが、813さんと814さんの言ってることは
バーチャルIPかなんか振っておけってことでしょうか(DBサーバに)?
初期の管理ユーザーとかテストユーザーの登録みたいなプロダクション用の初期DBみたいのってどうやっておこうなうもんなんでしょうか? ・migrationに書く ・script/以下にスクリプト置いて、script/runnerで実行させる migrationに書く方法だと、migrate後にdevelopment DBに db:fixtures:loadとかして開発用に初期DB入れようとすると、 migrationで入れたDBデータがぶっ飛んでしまいませんか?
xxx_fu って名前のプラグインが多いんだが、fu ってなんぞ? fxck you の略?
カンフーのfu。「なんか東洋のすごい技」みたいなイメージで使われてる。 GIMPのScript-fuあたりが嚆矢かな。
☆ へぇへぇへぇー 〃Λ_Λ ( ・∀・) ┏┓⊂ ⊂_) `/ ̄ ̄ ̄ ̄ ̄ ̄/| | ̄ ̄ ̄ ̄ ̄ ̄| | || ̄ ̄ ̄ ̄ ̄|| | || ┃┃┃ || | || ┃┗┫ || | || ┃ ┃ || | ||_____||/ └──────┘
>>816 db:fixtures:load RAILS_ENV=production
でいいんじゃないかと思います。
初期ユーザーなどは開発用にも必要なものだと思いますので、
それぞれの環境ごとに、しかし同じ方法でやるのがいいと思います。
822 :
nobodyさん :2009/08/15(土) 02:11:01 ID:3etX9jN1
>>815 Master 192.168.1.1, 192.168.1.2
Slave 192.168.1.3
こんな風にIP振っておいてクライアントは192.168.1.1にアクセスする。
SlaveがMasterの死を検出したら、
Slave 192.168.1.1, 192.168.1.3
ってする。クライアントは依然192.168.1.1にアクセスする。
ってやってるよ。
db:fixtures:load ってモデルのバリデーションかからないんじゃないの?
824 :
nobodyさん :2009/08/15(土) 21:07:23 ID:Ioyu6DB3
〜.rxmlのtemplateを作成して、xmlを出力してみたところ、 中の2バイト文字が全て?〜;の形式にエスケープされて出力されてしまいました。 このエスケープ処理を切るにはどのようにしたら良いのでしょうか。 よろしくお願いします。
誤検出とか、検出出来ずにうまく切り替えられない事も多いけどね。 あとIPアドレス振り直しは、ARPが書き変わるまでは通信不能。 デフォルトゲートウェイ設定の絡みで、同一サブネットだと、複数IP振っても特定のIPしか使われなかったりするけどな。 理論では、うまく逝きそうな仕組みも現実はそう簡単ではない事も多い。
>デフォルトゲートウェイ設定の絡みで、同一サブネットだと、複数IP振っても特定のIPしか使われなかったりするけどな。 kwsk (w
828 :
nobodyさん :2009/08/16(日) 12:59:03 ID:U2+68uzW
829 :
815 :2009/08/17(月) 11:15:00 ID:???
>>822 ありがとうございます。
hearbeatで構築しようと思います。
スレ違いにも関わらず返答頂き、助かりました
830 :
nobodyさん :2009/08/18(火) 14:36:53 ID:xQbi8Iqy
Rails.public_pathをtestの時だけ変更したいんですが・・・。
config/environments/test.rbに
Rails.public_path = RAILS_ROOT + "/test/public"
を追加してテスト環境モードでサーバを起動して、
http://localhost:3000/foo にアクセスしても、RAILS_ROOT + "/public/foo"のファイルが見えてしまいます。
何かいい解決方法はないでしょうか。
>>830 apacheとかウェブサーバー側で操作すんじゃないの?
832 :
830 :2009/08/18(火) 18:19:34 ID:xQbi8Iqy
railsって特に設定しなくても RAILD_ROOT + "/public" を公開用ディレクトリとして認識してくれます。 んで、どこに設定されているんだろうかと調べていたら Rails.public_pathという設定に行き着きました。 それだったらRails.public_pathに何か設定する方法があるだろうと思っています。 サーバ側の設定なんでしょうか? 仮にサーバだとしてRailsはいつRAILS_ROOTをサーバに渡すんでしょう。
夜になったらrails仙人が来るから、それまで待っててね
835 :
830 :2009/08/18(火) 20:26:23 ID:xQbi8Iqy
そうです。
使ったことはないがmongrelなら「--prefix」というオプションがある これに指定すればいけるんじゃないだろうか 時間がなくて試せないので、動作報告をくれるとうれしい
837 :
830 :2009/08/19(水) 02:50:08 ID:/4UU0U8g
838 :
816 :2009/08/19(水) 12:32:09 ID:???
レスありがとうさんです。 fixtureに書く方法だと、どうしてもテスト用のデータになっちゃうんで、 結局、新たにmigration1個作ってそこに書く方法でやっちゃた。
質問があります。 viewのedit.html.erbのform_for内で入れ子にしようと fileds_for を使ったところ、 Hoge expected, got HashWithIndifferentAccess とか言われてオブジェクトの更新ができません。 belongs_toで関連付けた Hoge.my_hage= に Hashがそのまま代入されているようなのですが、 どうしたらよいものでしょうか? 構成は以下のようになってます model: hoge.rb class Hoge < ActiveRecord::Base belongs_to :my_hage, :class_name => "Hage" view: edit.html.erb # /nested/hage/1234/edit <% form_for([:nested, @hage]) do |f| %> <%= f.error_messages %> (略) <% f.fields_for :my_hage, @hoge.my_hage do |hage_form| %> <p> <%= hage_form.label :name%><br /> <%= hage_form.text_area :name %> </p> <% end %> <%= f.submit '更新' %> <% end %>
840 :
839 :2009/08/19(水) 13:22:50 ID:???
>>839 のつづき
controller: nested/hage_controller.rb
def update
@hage = Hage.find(params[:id])
respond_to do |format|
if @hage.update_attributes(params[:question])
flash[:notice] = 'Nested::Hage was successfully updated.'
format.html { redirect_to(@hage) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @hage.errors, :status => :unprocessable_entity }
end
end
end
841 :
839 :2009/08/19(水) 14:31:14 ID:???
>>839-840 ですが、accepts_nested_attributes_for を使うことで解決いたしました。
class Hoge < ActiveRecord::Base
belongs_to :my_hage, :class_name => "Hage"
accepts_nested_attributes_for :my_hage
でOKでした。
以下が参考になりました。
Localization expected, got HashWithIndifferentAccess - Ruby Forum
http://www.ruby-forum.com/topic/184877 ありがとうございました。おさわがせしました。
>>837 うわ、すまんかった。
このオプションでいけるんじゃないだろうか。
--root PATH
Set the document root (default 'public')
843 :
nobodyさん :2009/08/20(木) 20:29:11 ID:OSASGkcC
マゾですかっwww
845 :
830 :2009/08/23(日) 04:36:10 ID:vSt0R6A2
>>842 さんご紹介の--rootでうまくいきました。
mongrel_rails start -r test/public
でtest以下のpublicを読んでくれました。
Rails3っていつリリースされるって情報は出てないんですか?
先日のルビー会議でrails3をリリースするという情報はあったがそれ以降何も聞かんな
お聞きいたします。 他のモデルとコントローラー両方から参照したいあるモデル(User,UserSession)があります。 セッション情報やユーザー情報が何度も参照されるため、 下記のように簡易的にクラス変数でキャッシュみたいなことをしたのですが、 デプロイするproductionモードとローカルのdevelopmentでは全然違う挙動をします。 というか、productionモードではわけがわからない動作をします。 def self.current_user return @@current_user if defined?(@@current_user) current_user_session = UserSession.current_user_session @@current_user = current_user_session && current_user_session.user end productionモードでは、クラス変数が初期化されたりしない?ということまではわかった(つまり、クラス変数が使いまわされる) のですが、代替の方法がよくわかりません。 どのように対処したものでしょうか? Rails 2.3.2です。
Railsは頼むから前方互換性を高めてくれよん PHPみたいなことはや(ry
Railsと比べればPHPのほうが遥かに互換性高いけど
yes
>>849 無駄に内部を弄るから互換性で苦しむはめになるんだよ
フレームワークと言語仕様を比べることに何の違和感も持ってないのか
>>853 同意。
PHPは言語で、Railsはフレームワーク。
比べるなら、PHPとRubyを比較するべきだよな。
まぁ、>
>>849 はそれすら分かっていないのかもしれないが。
849はPHPも知らない 知っているのは伝聞のFUD
PHPは互換性を維持するために全身速度が遅く、色々縛られているが、 rubyはぶっちゃけ、過去のことなど放り投げちまう開発姿勢だから名、 互換性で比べたらphpに軍配上がっちまう罠、 比較対象として持ち出した奴が バ・カ
yakinikunoはや(ry
kawazakananoハヤ
PHPで10行以上のコード書きたくない>< PHPで2ファイル以上のコード読みたくない><
PHPスレかと思ってしまったではないか
互換性は別にいいが機能低下は避けていただきたい
862 :
nobodyさん :2009/09/03(木) 08:08:48 ID:801E0K0+
こんにちは。 他のスレッドで質問したのですが、スレッド違いということで、 再度、ここに書かせて頂きます。 前の開発者がRuby Railsでサイトを構築しました。 今回、私が、別の機能を付け足すことになりましたが、 私はRuby Railsを知りませんので、/manage/フォルダ以下に、 PHPで開発することになりました。 /manage/以下に、.htaccessを設定したのですが、動かず、404ページが返ってきます。 自分なりに色々調べた結果、Passenger/mod_railsを使っているため、 /manage/の.htaccessが、それによって上書きされているようです。 RailsAllowModRewrite On を使えば、なおるようなことを言われたのですが、 /manage/.htaccessでそのように設定しても、/manage/.htaccessに設定してあることが 有効になりません。 どなたか知っていたら教えて頂けないでしょうか。 よろしくお願いします。
ぜんぜん具体的じゃないからさっぱりわからん。
ドキュメントルートがpublic_htmlではないということはないだろうか。 普通Railsのアプリ一式が入っているディレクトリをRAILS_ROOTとすると、 ドキュメントルートはRAILS_ROOT/publicにするのだが。 Passengerを使ってるのなら、ApacheのDocumentRootディレクティブを調べてみてほしい。
下記のような問題なのですが、みなさんどうしてらっしゃいますでしょうか?
[Rails] ちょっとしたタイプをどこに置くか - capsctrldays(2006-05-30)
http://capsctrl.que.jp/kdmsnr/diary/20060530.html#p01 お聞かせ願いたいです。
具体的には、上記サイトにもあるのですが、
1:男性
2:女性
1:承認待ち
2:活動中
3:削除
のような定数とActiveRecordを使う上での兼ね合いといいますか。
・配列(Hashとかにしちゃう)
・テーブルにしちゃう
どちらがオススメでしょうか?
table
869 :
862 :2009/09/03(木) 14:21:23 ID:4G6aJPkU
ご返信ありがとうございます。
>>864 そうです。
分かりやすく言うために、public_htmlといいましたが、
実際は、RAILS_ROOT/publicになってます。
で、今回、RAILS_ROOT/public/manage/フォルダにPHPで開発することになり、
(私はPHP言語しか知りません)
RAILS_ROOT/public/manage/.htaccessを作成したのですが、
.htaccessが作動しないのです。
私がRuby Railsの知識が全くないので、どのような設定になっているか分からない状況です。
>>865 httpd.confの中では、<virtual></virtual>はコメントアウトになっています。
ただ、Include /etc/httpd/conf/lxadmin/lxadmin.confとかいてあり、
lxadmin.confの中には、いくつかのconfファイルがincludeしてあります。
そのうちの一つのdefault.confには、下記の<virtual>タグが記載されています。
<VirtualHost \IP address:80\>
DocumentRoot /home/lxadmin/httpd/default/
servername default
ServerAlias default.*
<Ifmodule mod_userdir.c>
Userdir "public_html"
</Ifmodule>
</VirtualHost>
この中にRailsAllowModRewrite <on|off> を記入すれば宜しいのでしょうか。
無知な者でご迷惑おかけします。
もし対処法をご存知な方がいらっしゃいましたら、お知らせください。
よろしくお願いします。
>>869 > 分かりやすく言うために、public_htmlといいましたが、
> 実際は、RAILS_ROOT/publicになってます。
間違った情報がわかりやすいわけないだろ。
逆の立場だったらわかりやすいと思うか?
おまえの中では勝手に同じものと処理してるかもしれんが、
他人がそんなことわかるわけないだろ。
質問するならちょっとは考えろ。無知とか関係ない。
> Passengerを使ってるのなら、ApacheのDocumentRootディレクティブを調べてみてほしい。
DocumentRoot /home/lxadmin/httpd/default/
こうなってるわけだが、ちゃんとレスを見たか?
RAILS_ROOT/publicはドキュメントルートとして機能してないと思うが。
「実際は、RAILS_ROOT/publicになってます。」
↑
これまでわかりやすく書いたのなら、
掲示板じゃわからんから周りの友達にでも聞け。
871 :
867 :2009/09/03(木) 15:05:15 ID:???
>>868 おー、tableですか。
DB使わないスクリプトなんかだと、Hashなんかでやってしまい、その延長でついHashにしてしまいそうになるのですが、
テーブル使う利点ってなんなんでしょうか?
ActiveRecordを使えるから、ってことでいいんでしょうか?
あと、viewでcollection_selectがそのまま使える、とか。
872 :
862 :2009/09/03(木) 16:46:48 ID:Gs6kTm0I
>>870 ご回答ありがとうございます。
DocumentRootがどこなのか、分かりませんでした。
/home/lxadmin/httpd/default/ の下に、
/home/lxadmin/httpd/default/manage/とやれば良いということでしょうか。
/home/lxadmin/httpd/default/phpinfo.php
を作成し、mydomain.com/phpinfo.phpとアクセスしたのですが、
404が返ってきました。
Ruby Railsの為、私の知っている通常のサーバーの設定でない為、よく分かりません。
私、海外の田舎でプログラマをやっている為、あまりこの分野の友達がいません。
もし、ご存知の方がいらっしゃいましたら、教えて頂けないでしょうか。
お手数かけて申し訳ございません。
よろしくお願いします。
873 :
862 :2009/09/03(木) 17:04:03 ID:Yl0KYuqm
付け足しですが、 実際、色々動いてるファイルは、 /home/admin/vhosts/mydomain.com/public/ 配下に設置してあります。 お手数かけましてすみません。 よろしくお願い致します。
>>867 データの多さに関係なく ActiveRecord で管理するのが一番融通が利くし楽でしょ。
だけど初心者の人はたいてい配列にしてマジックナンバーを撒き散らすよ
酷いのになると配列(の定数)すらない場合も。
>875 でもActiveRecordになるとreadだけじゃなくてwriteもできるんだぜ。 定数ということを表現できてないじゃないか。
>>862 Rails勉強しようって気はないのか?
なければスレ違い
881 :
867 :2009/09/04(金) 16:59:50 ID:???
>>875-879 サンクス
ActiveRecordで管理した方が利点あるように感じました。テーブルでいってみます。
>>878 こんなプラグインあるんですね。ふーむ、用途的に違うようなきがしないでもない??
ちょっとした質問よろしいでしょうか? button_toヘルパーにてGETでパラメーターつきで、RESTのnew actionのボタン型のリンクを作ろうとしたのですが、 うまく行きません。 button_to(new_item_path(:hage_id => 1234), {:method => :get}) とすると、HTML上では、action="/item/new?hage_id=1234"となっているのですが、 <form>のせいか、実際にボタンを踏むと、/item/new? に飛ばされてしまい、 パラメータがなくなってしまいます(´・ω・`) たぶんに、 <input type="hidden" name="hage_id" value="1234" /> みたいのを仕込まないといけない、というのはわかるのですが、ソース見る限りbutton_toではできないですよね。 一発ポンでできるヘルパーみたいなのってないもんでしょうか…?
Item belongs to Hage ということなら、config/routes.rb が ちゃんと書かれてれば new_hage_item_path(:hage_id => 1234, {:method => :get }) で /hage/1234/item/new になる気がしないでもない。 # 複数形にするんだっけ……?
GETならリンクにすればいいと思うのだがまずいのか?
>>880 というかRailsやPHPとかの環境の選択ってプロジェクトと一蓮托生じゃないの?
混在とか今時当たり前なの?気色悪いとか思わんのかな。
気色悪い けど残念なことに過去の資産を利用するためにRubyからPerl/PHPを呼ぶこともしばしば
>>881 ARで管理する場合はpositionカラムも一緒に入れてacts_as_listしておくとさらに後が楽。
完全に自分用のアプリで、順番は id や created_at 順でじゅうぶんっていうことならいらないけど。
定数をActiveRecordで管理すると、使用するときはどうなるのよ? Gender.findById("1").name //チンコ Gender.findById("0").name //マンコ やだよ。そんなのw
君はRubyとかRailsではなくてシステムの作り方を勉強しなさい
答えられない質問を受けたとき、そうやって相手の人格を 非難するような人っているよね。
お前が考える「人格」ってなんだ?
人格はちょっと言い間違ったかも。 言いたかったことは、相手の論点について反論するのではなく、 その人の性格、能力、過去などについての批判を加えるのは卑怯では ないかということ。(そういうのってよくあるでしょ)
でっていう
お前が考える「ちょっと」ってなんだ?
>>892 まともな開発者ならこの手のマスターデータを定数などにしない。
マスターデータの種類が増えたり変更が入るたびにプログラムの変更が入るから。
「男」や「女」なら増えないと思うかもしれないが、
この絶対に変わらないように思えるデータも「男性」「女性」にしたいなんてことが起こりうる。
「承認待ち」だの「活動中」あたりは言うまでもない。
この手の失敗はDBがここまで使われる前まではよくあって、
それこそ「男」を「男性」に変更するだけで、プログラム修正&追加料金なんてのはザラだった。
さすがに最近はあまりないと思うが。
だからこれはレスどおり「システムの作り方」を勉強すべきなんだよ。
そもそもActiveRecordパターンの目的から完全に外れてるしな。
>>888 は「定数」という言葉を間違って使ってるんじゃないかとも思うが。
ちなみに
>>893-896 はおれではない
つまり?
ぬお パッチってどうやって当てるんだっけ?
railsの更新は怖い。
902 :
nobodyさん :2009/09/05(土) 13:33:12 ID:AlMjWjcW
>>900 パッチを見て-の箇所はすべて消す。+の箇所は貼り付ける。
人間が手でやるのが一番確実だからきちんと手作業でやろう。
人間の手でやるのが一番確実って考えがすごいな
905 :
nobodyさん :2009/09/05(土) 23:01:18 ID:WL9xF+Eh
railsアプリの開発の為に、新しいPCを買ったんだけどさ、
(新PCも旧PCも Windows 機)
何でもいいやって感じで適当にrubyインストールして、gemでraisインストールして…、
って感じで環境整えて、いざ開発中のアプリを動作させてみたら全く動作が遅いの。
Completed in 59313ms (View: 40359, DB: 18719) | 200 OK [
http://localhost/...] みたいな法外な速度でさ。
いろんな可能性を考えて、実行環境のバージョン変えたり、ベンチマーク取ったり、
OSを再インストールしたり…、とか3日ぐらい試行錯誤してたんだが、全く改善なし。
んで、ハードウェアに手をつける前に、ふと思いついて、"one-click ruby installer"でrubyを
インストールし直したら、一発で直ったよ…。
新PCで環境作るときに使ってたのは"ActiveScriptRuby"
理由はさっぱり分からないんだが、そういうことって有り得る?
>>906 p72 は脆弱性の含まれる旧バージョンですので、実運用には利用しないようにしましょう。
arton さんが別途 p72 を置いてくれています。ActiveRuby-1.8.7-p72.msi
>> 897 横からすまん。 後から変更される可能性の高いデータならテーブルで 管理するというのは分かるんだが、性別などその可能性 の低いものはモデルに定数として定義してしまってるな。 深い考えがあるわけではなく、感覚的に。 請負とかじゃなくて、自前で開発と運用してるので プログラムに手をいれるのは比較的容易というのもある。 性別をテーブル(モデル?)にした場合、たとえば 女性のユーザーを検索するときはどんなふうに記述するの? 定数にした場合はこんな感じだよね: User.find_by_sex(User.FEMALE)
性別も、「男」「女」と規定してたら、後で「不明」が必要になった ことがあったよ。事業譲渡を受けたサービス元が、会員の性別を管理 していなかった。でも、男が0で女が1と定数にしてたから、不明を 2なんて定義するのは影響が大きすぎるので、性別は0なんだけど、 会員IDがこのプリフィックスで始まるときは不明とみなす、っていう 処理を必要なところに入れる、汚らしい解決法を取った。
ISO の性別使えばいいのに
不明は未登録だろ。nullでいいじゃんか
912 :
nobodyさん :2009/09/06(日) 13:55:42 ID:2yjCPfLR
で、お客さんに会員IDで差別されてるっていわれるんですね。
でかそうなシステムをつくってる人 も結構いるのかな? RoRのイメージって1,2人で1ヶ月開発ぐらいで 運用開始して、その後継続的にちょこちょこい じっていくようなスタイルを想像してる。
2.3.4にはアップデートしたんだけど、2.2.3がないね。 これはまってれば2.2.3がリリースされるの? 皆さんはどうしてんの? gemでインストールしてるんで直接パッチしたくないんだけど いい方法ありますか? アプリが複数ある場合はfreezeするときついし。
viewで参照したい定数ってどこに置いたらよいの? application_helperに置いて参照しようとしても、 uninitialized constant ActionView::Base::CompiledTemplates::DEFAULT_TEXT_AREA_WIDTH みたいに言われるお…
917 :
nobodyさん :2009/09/06(日) 17:34:23 ID:2yjCPfLR
ApplicationHelper::DEFAULT_TEXT_AREA_WIDTHだろ常識的に考えて。 ったくっ!
railsやるならmac買えば良かったのに
TextMateでスクリーンキャストするためのMacですねわかります
どうやばいか日本語で言わないとアップデートしない日本人が多いはずだ。 XSS Vulnerability in Ruby on Rails ================================== There is a vulnerability in the escaping code for the form helpers in Ruby on Rails. Attackers who can inject deliberately malformed unicode strings into the form helpers can defeat the escaping checks and inject arbitrary HTML.
お前らがRailsで作ったサイトにアクセスしたユーザが騙されたり お前らがRailsで作ったサイトにアクセスしたユーザから情報が盗まれたり するってことだ
923 :
nobodyさん :2009/09/08(火) 02:30:57 ID:hdImoFaT
Rails2.3.4にしたらviewがクソ遅くなった!どうなってんだ??
>>924 リポジトリなしでも、git amコマンドで直接当てられないかな?わからんけど
gitスレで聞いた方がいいかも
>>924 最初のURLのコメ欄にあるが、普通にpatchコマンドでいけそうだが
git am形式である以前に単なるunified diff。
>>927 先頭付近のメール?ヘッダ部分削除してpacheコマンド、って感じでおk?
>>928 patchは、^diffだったか^Indexだったかに遭遇するまでの行は無視する。
今回のパッチで UTF-8 や SJIS の文字チェックしているから、 表示する文字が多いと線形に遅くなりそう。
viewの中から public ディレクトリにある howto.html へのリンクを作成したいときは
どうすればいいのでしょうか。
link_to('ハウトゥス', '/howto.html')
http://myserver.examle.com/myapl/ のようにサブディレクトリ付きで
動作しているときの /myapl/ が付かないのです。
image_tag のように、この /myapl/ を付けるにはどうしたらいいんでしょうか。
>>932 たぶん先頭のスラッシュが駄目なんじゃね?
link_to('ハウトゥス', 'howto.html')
Rails 2.3.2から2.3.4に上げようとしているんだけどうまく行かないっす…。 $ suso gem update railsして、 $ rails -v 2.3.4 の状態で、 $ cd my_project $ rake rails:update $ grep RAILS_GEM_VERSION config/environment.rb RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION となっており、ruby script/serverでも2.3.2が立ち上がってしまいます… どのようにしたものでしょうか? 環境 Ubunut 9.04(coLinux) Rails 2.3.2→2.3.4 Ruby 1.8.7
Rails3 + Ruby1.9 速くなりすぎw
937 :
935 :2009/09/08(火) 17:39:37 ID:???
RAILS_GEM_VERSIONを修正しないといけないのね・・・ config/environment.rbを RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION にして、 $ rake rails:update したら、無事アップデートできました。 お騒がせいたしました。ありあgとごうざいmした。
どこで聞けばいいのかな。 Railsの開発で使用しているcoLinuxのcofsって、lockできない仕様? ruby script/plugin install git://github.com/rails/acts_as_list.git みたいなのが失敗する。以下、エラー error: could not lock config file ~my_project/trunk/vendor/plugins/acts_as_list/.git/config error: could not lock config file ~my_project/trunk/vendor/plugins/acts_as_list/.git/config error: could not lock config file ~my_project/trunk/vendor/plugins/acts_as_list/.git/config Initialized empty Git repository in ~my_project/trunk/vendor/plugins/acts_as_list/.git/ fatal: Not a git repository Windows側でcygwinから使うと問題ないからまあいいんだけど。
rails3っていつごろ出るんですかね? 最近railsの話題追ってなくて… 開発は順調なのでしょうか
941 :
938 :2009/09/09(水) 07:38:24 ID:???
>>939 スレタイ検索したらcoLinuxスレあった・・・いってきまつ
帳票印刷の仕事がありそうだから、JasperReport + JRubyOnRails がどんなもんか 調べてみた。 普通に動いてビックリ。 さて、JRubyとdRubyとの相性はどんなもんかのう...
>>942 rubyな帳票印刷ライブラリってのはないから
Javaなライブラリ使うためのJRubyonRailってこと?
>>943 Yes.
Rubyでなんかいいのある?
dRuby次第ではJVMのバックグランドプロセスににdRuby経由でPDF生成タスクを
投げて、アプリ自体はCRubyなRailsでいいかもとか夢想してるけど...
945 :
nobodyさん :2009/09/09(水) 20:29:44 ID:d2cRtkfX
>>944 「Ruby Printing Service」なんてのもある
>>942 、944
似たようなことをやったけど、普通に使えます。
JRrubyからPOIを使ってExcelのワークブックを作る処理をdRubyのメソッドにして、CRubyのRailsから呼び出してます。
各セルの中身や装飾なんかは、配列やハッシュに数値や文字列を納めて、パラメータとして渡して、出来上がった
ワークブックのバイナリイメージを戻り値にして、クライアントにダウンロードさせています。
拡張ライブラリのオブジェクトは試してみてないですが、基本的なオブジェクトは普通にやりとりできてますよ。
drubyの互換性はいいかんじなのか。 YAMLが微妙でてをひいたよ
日本語でいいんだぜ?
949 :
nobodyさん :2009/09/10(木) 14:40:06 ID:ciwTQ8pm
shoulda を入れたところ(environments.rb で config.gem しただけ) 既存のテスト結果に続けて Loaded suite /usr/bin/rake Started Finished in 0.000451 seconds. 0 tests, 0 assertions, 0 failures, 0 errors と出るようになったのですが、これは何をしようとしてるんでしょうか?
>>949 テストを実行して 0.000451秒以内に終了して、テストもアサートも失敗もエラーも1個もなかったよっていってるみたい
>952 出来ない。というかキレイな方法はない。 jQuery つかえ。
そういやprototype.jsよりjquery使ってる人が多いのは何故だろう。 Railsのサブセットにprototype.jsがあるんだからこっち使ったほうが良さそうなのに。
今はJQueryの方が主流なんだぜ
新しいから使いたがる奴は多いけど主流は言いすぎだろ
使いやすいからじゃねーの? 数行で書けるそうだよ、使ったこと無いけど。
今や勢いは完全にjQueryな気配だよね プラグイン含めてライブラリの数が違いすぎる
RoRでExtJS使える?
使える
使ってる。
既にある既存システムのユーザマスターを使ってログインさせたい場合、どうしたらいい? 社内システムを拡張しようとした場合、ユーザーマスタは新規で作れないのよね…。 使おうと考えているプラグインはrestful-authentication。 今思いついた解決策は、restful-authenticationに適合するような形の ユーザマスタへのView(DB上のほう)を作ること。 ただしrestful〜って、パスワードを暗号化してある前提で組まれてるんだよね。 現行のユーザマスタはたぶん暗号化されてないので、どうしようかまよってる。 どうしようかねぇ〜。
それだけの情報じゃアドバイスしようが無いわ
>>964 ありがとう。要件固めてからまたくる。
|会社| λ.....
既存のユーザマスタのパスワードを元に暗号化してパスワードだけ入れなおすことすら出来ないの?
内部でHTTPでも何でも使って、既存システムに代理で認証処理を 行うってことになるんじゃないの?
既にある既存システム
結論からいうと、restful-authenticationが吐き出すuserモデルの
authenticated?メソッドを書き換えればいける…。
(ちなみにユーザマスタはoracle、他はmysqlなんて構造でもいけた。)
>>963 で言いたかったこと↓
システムごとにユーザマスタを個別に持ちたくない。
社内システムはphpのもあるしstrutsのもあるしvb.netのもある。
んで、それらのシステムは同じユーザマスタを利用してる。
ユーザマスタに1ユーザ追加すれば、php(のシステム)でもstrutsでもvb.netでも
そのユーザが使える。(ログインに関するロジックは各システムで個別に持ってる。)
で、新規に追加するrailsのシステムもそのユーザマスタを使いたいと…。
restful-authenticationで認証関係を組むと楽なんだけど、社内共通のユーザマスタの構造と
restful-authenticationが想定してるユーザマスタの構造が違うからどうしよっかなぁと。
>>966 それをすると今動いてるシステムの改修が発生して、一番工数が多くなる。
Authlogic とつぶやいてみる。
そこまでごちゃごちゃになってるんだったらプラグインなんて使わないで自前で実装した方がいいのでは?
いろいろ調べたんだが、authlogicがいいのかと思った。
そろそろ産め。 パスワードが無ければ、既存システムから拾って来て暗号化して格納して、そっちを参照するぐらいが現実的だろうな。 apache側でldap認証でいいじゃんと思うが。
パスワードを生でDBに突っ込んでる仕様を変更できないって時点で終わってる
rails3っていつ出るんだ 新しいもの好きでRails始めたのに今じゃ新しい要素0
ようやっとrails2に移行できたばかりなのに3とか勘弁してくれ
オレなんか、Railsによるアジャイル開発第二版で1.26を勉強中だぞ
新しい物好きならTornadoでもやってたら?
>>977 おれも。
Pragmatic の英語版の第三版を入手しようと思ったが、
第三版は Rails 2系の内容になっているけど、もうすぐ Rails 3 が出るんだよね。
もうすぐとは言うがな、まだアルファすら出ていないぞ。
たしかに。 今年の前半では、Rails 3(Merb との統合)は夏頃には出るとか言われていたけど、 今年いっぱいは出ないかも。
>>978 初期データ設定用のタスクを自分で書いてたけど
こっちを使った方が幸せになれそうだな。早速そうするわ
984 :
983 :2009/09/13(日) 18:15:45 ID:???
と、思ったけどやっぱやめw テーブルごとに初期データ設定のタスクを作って依存関係を設定した方がいいや
>>977 俺もそのやり方でサンプルいじりながら勉強した
その後はすぐに最新版に切り替えて 1.26 との差分をネットやレシピブックで
補うという感じ
アジャイル開発の第三版欲しいけど
今すぐ英語版買うか、翻訳版が出るのを待つか悩み中
各バージョンを完全に最初から習得しなおしになることが多い人は3を待つ。 差分で習得できそうな人は2で始める。
ここにいる人間はrailsのソースコードすら読めないのか
umetemiru
>>987 本を読んで勉強する人はソースコードを読まないとでも?
なんでそこで排他論理になるのか意味不明
仕様を知らずにいきなりソースを見ても把握は難しいだろう。 時間をかければ可能だろうが、効率的なやり方ではない。 どういう機能があるのかを系統立てて知るには書籍が一番手っ取り早い。
マジレスするとどこから読んだらいいのか、 読みたい *.rb がどこにあるのかよくわからん ソースは GEM の下にあるのは find でみつけたけど Rails コードリーディングみたいなサイトないかな
>>991 関連gemのソースからtagsファイル作ってタグジャンプ
993 :
991 :2009/09/13(日) 20:07:32 ID:???
>>992 ありがとう
いまは、エラーが出たら、そのクラス名で find と grep で結局たどっています。
Java と違い、Ruby はクラス名とファイル名が 1:1 ではないので、
Java から来た人間だと、どうもおっかけにくい。
地道に追っかけることにします。
コントローラから view への渡し方でどんなことが出来るかを調べたくて、
render.rb はだいぶ読み込んだが・・・
もしかしてローカルでAPI参照してないのだろうか。
確かに rdoc の View Source は素晴らしい private なメソッドまであれで見られるようになればソースブラウザとして かなり便利なものになるだろうな と思って man 見たら --all というオプションを発見してしまった
996 :
991 :2009/09/13(日) 20:28:22 ID:???
http://railsapi.com/ とかでオンラインでも見るけど、
ローカルで使っている Rails が必ずしも最新版とは限らないので、
やり方は忘れてしまったが、ローカルで Rails で空の App をつくって、
そこから rdoc(?) 作らせて、それを見ている。
でもソースを直接見たいときもある。
>>995 > 確かに rdoc の View Source は素晴らしい
これは私もそう思う。
Javadoc も取り入れれば、と思った。
Javaは型ががっちりしてるので、ソースの内部を見る必要なくない? あるとしたらたぶん、メソッドの定義が下手なんだと思う。
998 :
991 :2009/09/13(日) 20:41:25 ID:???
>>997 いや、Java に限らず、そのメソッドの内部で何が行われているか
知りたいことがあるから、API を見ることとソースを見ることは別だと思います。
1000 が近いので、スレ立ててみますね。
テンプレは
>>1-2 を使用します
>Java と違い、Ruby はクラス名とファイル名が 1:1 ではないので、 ha?
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。