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

【Ruby】Ruby on Rails Part7

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/30(木) 23:07:27ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1224838013/

■参考サイト
<英語>
本家:http://www.rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails

<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/

■参考スレ(プログラム板)
Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/l50
0252nobodyさん2009/06/08(月) 11:03:15ID:???
>>251
自宅サーバー
0253nobodyさん2009/06/08(月) 11:11:23ID:???
自鯖は無料じゃない
02542512009/06/08(月) 11:27:36ID:???
やっぱりないんですかね。。。
252 的なつまらん回答としては
xrea に Rails や、GAE を JRuby on Rails とかかなぁ。
0255nobodyさん2009/06/08(月) 11:29:14ID:???
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 を指定する必要がありそうな感じなのですが、
どうしたらいいでしょうか。
0256nobodyさん2009/06/08(月) 14:35:34ID:???
>>255
gettextはもう使わないようにする。
0257nobodyさん2009/06/08(月) 14:42:45ID:???
252=256
0258nobodyさん2009/06/08(月) 14:45:16ID:???
>>251
herokuって無料ベータ終わったんじゃなかったけ?
クラウド系で1つだけなら無料のところあった気がする
0259nobodyさん2009/06/08(月) 14:47:37ID:???
あったあった
Morph AppSpaceだ。

PaaS, the leader in Platform as a Service :: Morph Labs
http://mor.ph/


Java/GrailsのWebアプリを無料クラウド環境で動かす (1/3) - @IT
http://www.atmarkit.co.jp/fjava/special/appspace/appspace_1.html
02602512009/06/08(月) 14:57:16ID:???
>>258
DB 5M までなら今も無料です。
ただ、5M は小さすぎて。
ttp://heroku.com/pricing#blossom-1
>>259
ありがとうございます。
DB も MySQL/PostgreSQL が用意されていてすごいですね。
0261nobodyさん2009/06/08(月) 15:39:25ID:???
>>255
ttp://www.moongift.jp/2008/06/thetis/
を動かしてみたいんです。
02622492009/06/08(月) 15:59:55ID:???
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メソッドが呼ばれているまではわかりました。

円記号への変換ルーチンが見つからないよヽ(`Д´)ノ ウワァァン!!
02632492009/06/08(月) 16:31:58ID:???
lib/capistrano/recipes/deploy/strategy/base.rb の Capistrano::Deploy::Strategy.system で

 if RUBY_PLATFORM =~ /win32/
  cmd.gsub!('/','\\') # Replace / with \\

というようなコードがあり、置換されているようでした。

本家でも確認されたこちらの問題のようです。

#76 Invalid subversion url - Capistrano - capistrano
https://capistrano.lighthouseapp.com/projects/8716/tickets/76-invalid-subversion-url
[Capistrano] Problem with :deploy_via, :copy and windows
http://www.mail-archive.com/[email protected]/msg05626.html


パッチあたるバージョンが出るまで、
置換されないように、/ 渡す方法ってないもんでしょうか?

Ruby一般な問題な気がするので、本スレの方で聞いてみます。
0264nobodyさん2009/06/09(火) 00:32:39ID:???
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])

こういう風に更新するのが正しいような気がするのですが・・・
0265nobodyさん2009/06/09(火) 16:21:04ID:???
NetBeansでrails触っているのですが、
全体像がつかめません。
どうしたら、どのファイルが必要であるかわかったり、
ファイルごとの関連性がわかるなど
全体像をつかむことが出来ますか?

0266nobodyさん2009/06/09(火) 18:01:27ID:???
>>265
I/O BOOKSの「はじめてのRuby on rails2」がおすすめ。
慣れるとまったく読むことの無い本になるけど、
非常に簡単に説明してくれるので、まずつまづくこと無くサンプルアプリが組めるはず。

学習の最初に火種にいい本だと思ってる。
他はレシピブックが個人的には神だった。
Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。
0267nobodyさん2009/06/09(火) 18:40:55ID:???
> Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。

今まさにこれで勉強してる訳だが(´;∀;)
0268nobodyさん2009/06/09(火) 18:45:52ID:???
駄目な本で勉強してるおまえは駄目駄目とい・・・


あ、すまん。つい
0269nobodyさん2009/06/10(水) 00:00:25ID:???
>>267
ごめん、「駄目」って言い方悪かった。
最初にその本から始めたんだけど、俺の頭が悪くて理解不能だった。
「はじめてのRuby on rails2」は、相当ハードル下げてくれてるから
(その分進みが遅くて内容が薄い)、俺でも理解できた。

> Ruby on rails Webアプリケーションスーパーサンプル
は、バージョンが1.3なのがマイナスだけど、ある程度理解した状態で読んだら
普通にいい本だったよ。
0270nobodyさん2009/06/10(水) 01:15:45ID:???
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作らないとだめなんでしょうか。

他にいい画像アップロードのプラグインないでしょうか。
0271nobodyさん2009/06/10(水) 06:36:31ID:???
>>270
やりたい事がアップロードできるファイルの種類の制限(画像のみ)やファイルサイズ
だけなら、簡単そうだからプラグインのソースを直接修正すればいいと思うよ。
0272nobodyさん2009/06/10(水) 10:51:34ID:???
画像アップロードといえば、paperclipがやたら人気だが
0273nobodyさん2009/06/10(水) 11:08:18ID:???
別にプラグインのソース直すことは無いと思うけど。
一回アップロードされるのはRailsのプラグインだと、
いまのところ仕方ないこと。
アップロード後にvalidationかけてはじく。

仕事で使うとどうしても確認画面入ってくるから、
そういう場合はいまだfile_column一択になってしまう。
0274nobodyさん2009/06/10(水) 11:22:05ID:???
>>273
仕事で Rails 使っている人発見!
入力→確認→登録の流れをどう実装していますか。

登録画面にも確認画面を表示しているならその方法や、
確認→登録の hidden は何か特別なこととかしてるかとか。
0275nobodyさん2009/06/10(水) 11:47:43ID:???
>>274
確認画面JavaScriptでやれとかいう人もいるけど、
ちゃんと画面つくってる。
無理にRESTにこだわる必要なし。
JavaScriptでやると、登録まできちんとしたvalidationできないし。

値はsessionで持ち回し。まぁ、他の言語でも普通な方法。
hiddenだと、確認→登録の時にもvalidationしなきゃいけないので。
02762742009/06/10(水) 12:49:12ID:???
>>275
なるほど。session ですか。便利ですものね。
ありがとうございます。
0277nobodyさん2009/06/10(水) 13:04:17ID:???
>>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付属品。
0278nobodyさん2009/06/10(水) 13:34:23ID:???
確認→登録の時にも勝手にバリデーションされるじゃん?

なんか違う意味でのバリデーションなんだろうか。
0279nobodyさん2009/06/10(水) 13:53:55ID:???
確認と登録に同じバリデーションを通るような処理を書くの面倒だから、
入力→確認→登録、というテンプレートないものかな。
0280nobodyさん2009/06/10(水) 14:04:01ID:???
仕事って言っても社内業務系は基本的に必要ないだろ。
ネット系なら確認画面は必須だが。
0281nobodyさん2009/06/10(水) 14:19:46ID:???
>>278
入力→確認 のときにvalidationかけてセッションに入れる。
エラーが出たら、入力に戻す。
確認→登録 のときは、すでにvalidationが通ってるから大丈夫。
登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
0282nobodyさん2009/06/10(水) 15:32:42ID:???
同じバリデーしょんっつてもvalid?呼ぶだけでしょ?

まあ、そう単純じゃない場合も良くあるんだよねえ。

すると、テンプレにしてもプラグインにしてもすべてのケースを網羅
できそうもないわけですね。

> 登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
redirect_toするだけじゃないの?


0283nobodyさん2009/06/10(水) 15:43:46ID:???
>>282
入力→確認→登録(エラー)→入力
よりは、
入力→確認(エラー)→入力
の方が、余計な確認画面とおらなくて良いって話でしょ。

0284nobodyさん2009/06/10(水) 16:25:24ID:???
入力画面と確認画面は if で分ける感じ?こんな感じで。

<% if 入力画面 %>
<%= f.text_field :foor %>
<% else %>
<%= params[:foo] %>
<% end %>
0285nobodyさん2009/06/11(木) 00:59:09ID:???
入力画面と確認画面は、別アクション。
当然、テンプレートも別。
デザインも別で上がって来るし、別の方が楽。
0286nobodyさん2009/06/11(木) 11:11:55ID:???
別に分けると楽なんだけど、項目の変更が入ると
入力と確認に手を入れないといけないのが DRY じゃなくて何か嫌。
YAML からでも入力と確認画面を自動生成する仕組みがあるといいのだけど。
0287nobodyさん2009/06/11(木) 14:27:20ID:???
仮にYAMLで自動になってても、デザインまでは直してくれない。
結局は手動で直すしか…。
仕事でやってると、デザイナの上げてきたデザインはめるのが辛い。
0288nobodyさん2009/06/11(木) 14:43:46ID:???
テンプレートはcssセレクタで指定して内容変えたり表示非表示したいよな。
あとサーバ不要でpartialできる仕組みを各ブラウザに持たせてデザイナの
成果物をそのまま使えるようにできないものだろうか。
<include partial="./footer.html" />

それか、Rails実行環境とSVNクライアントを
ブラウザのプラグインレベルで提供。でざいなさんもerbやってもらう。
0289nobodyさん2009/06/11(木) 15:13:57ID:???
デザイナーにソースを埋め込んでもらえばいいじゃん
そんなに複雑なロジックをテンプレートに埋め込んでるの?
0290nobodyさん2009/06/11(木) 17:25:37ID:???
うちはデザイナにerb教えてみたけど、ほとんどに人が扱えなかった。
Railsだとフォーム関連のタグが全部ヘルパになってるし、
タグにclass一個付けるにも引数にしなきゃいけないので
その辺でダメだったみたい。

他にも便利な独自ヘルパ作ってる場合(ビューの一部がヘルパに行ってる)や、
Ajaxでコントローラ内にRJSを入れていて、
そこにHTMLが入って来たりすることもある。

別にテンプレートにロジックが入ってる訳じゃなくても
デザイナには難しいみたいよ。
0291nobodyさん2009/06/11(木) 18:31:40ID:???
デザイナには erb 難しいね。
あと、たとえやってくれても、
erb のタグとか消してしまっていて、
確認をしないといけないから
開発者の手間があんまり変わらないし。
02922672009/06/11(木) 19:47:21ID:???
件の本読んでたらscaffoldが完了しないわ動作確認でRutingErrorになるわで
悩んでたんだけど2.0から変わってたのね・・・情報古いわ・・・
0293nobodyさん2009/06/11(木) 20:12:53ID:???
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
がいいのかなあ。

皆様どうしてますか?
0294nobodyさん2009/06/12(金) 00:58:46ID:???
デザイナは馬鹿だしな。
DWで対応してるPHPのほうが、まだ抵抗が少ない。
いまやHTMLと画像が用意出来れば十分な時代でもないのに。
0295nobodyさん2009/06/12(金) 08:32:37ID:???
>>294
デザイナーはバカじゃないだろ…。
役割を考えろ。
0296nobodyさん2009/06/12(金) 09:02:22ID:???
このバカとか思って教えても伝わらないよ
相手が理解できないならまず自分の教え方に問題がないか振り返らないと

代入のやり方とヘルパーの機能をまとめたものを渡せばある程度なんとかなるんじゃないだろうか
あとは分岐と繰り返しだけど、繰り返しは自動生成されるやつそのままでいけるだろうし
分岐も何回かやれば、簡単なIF文は身につくような


まあ、デザイナーに教えたことないから完全に脳内シミュレーションで
実際はイライラするのかもしれないけど
0297nobodyさん2009/06/12(金) 12:39:20ID:???
Smarty分かる人でもRailsのerbは無理だったよ。
>>290 みたいにデザインすべき要素があちこちに分散していて
全体の把握がしずらいみたい。
開発側でデザインはめて、はめた後のものを少し修正ならできた。

あと開発側としても、デザイナにerb触らせて動かなくなったりするのが
怖いというのがある。

0298nobodyさん2009/06/12(金) 13:04:00ID:???
>>297
ほんとに。Smartyわかってもダメなのか。

ヘルパーって調べるのとか結構時間がかかって
面倒とか思ってるのはおれだけだろうか。

でもあると使いたくなるし、後で使ってないところを見つけると直したくなる。
いっそごそっとなくなってくれれば楽なのかもとたまに思う。
相当役に立つやつは残してほしいが。
0299nobodyさん2009/06/12(金) 16:24:44ID:???
>>295
数人でやっている零細なんだろ
0300nobodyさん2009/06/12(金) 21:47:50ID:???
>>281
セッションにいれるのはparamsかな。
cookie storeだとあまり大きいのははいらないだよね?
0301nobodyさん2009/06/13(土) 03:57:58ID:???
そもそも論理的思考が皆無。
HTMLのタグとかも理解せずにDW弄ってる奴らだし。
ちゃんとALTタグ設定してるの見た事無い。orz
0302nobodyさん2009/06/13(土) 05:18:17ID:???
じゃあ、お前は彼らと同じようにデザインが出来るのか?
0303nobodyさん2009/06/13(土) 13:49:34ID:???
>>300
うちはactive record storeが多い。
cookie storeにした事はほとんどないかも

0304nobodyさん2009/06/13(土) 21:38:32ID:eLQY8eGW
Stringを拡張しようとおもうだけど、railsだとどこに書くのが適切?
0305nobodyさん2009/06/13(土) 22:13:41ID:???
拡張を定義したファイルを置く位置?
lib/string_ext.rb
かな。
0306nobodyさん2009/06/13(土) 22:51:14ID:???
lib以下でもいいし、こんな感じでプラグインにしてもいいかも。
vendor/plugins/string_ext/init.rb → (require 'string_ext'って書くだけ
vendor/plugins/string_ext/lib/string_ext.rb → Stringの拡張処理
0307nobodyさん2009/06/13(土) 23:08:45ID:???
config/initializers/に置くと自動的に読み込まれるけど、
「初期化」じゃないからきっと行儀が悪い気がする。
0308nobodyさん2009/06/13(土) 23:35:49ID:???
>>307
おれならたぶんそこに置く。というか実際置いてる。
使うときに何の宣言もいらないし。

初期化って「本処理が始まる前にやっておくべきもの」だから、
それほど行儀が悪いということはないんじゃないだろうか。
0309nobodyさん2009/06/15(月) 11:54:46ID:???
3.0の正式版はまだか〜?
はやくしてくれ〜
0310nobodyさん2009/06/15(月) 13:03:54ID:???
>>309
無茶いうな。

0311nobodyさん2009/06/15(月) 13:42:47ID:???
>>310
なんで?6月リリースを目指すってどこかで読んだ気がするけど
0312nobodyさん2009/06/15(月) 14:08:27ID:???
せっかく Rails 2.1.1 覚えたのに、
3.0 系列になったら、またごっそり変わるのか・・・・
0313nobodyさん2009/06/15(月) 14:09:49ID:???
>>304-308
自分は、config/environment.rb に、

class << String
 〜
end

みたいに再定義していたんだけど、この方法はお行儀悪いでしょうか?
0314nobodyさん2009/06/15(月) 14:16:41ID:???
Merbから高速化のノウハウを吸収するらしいじゃん。
おれは歓迎だけど。ただ1.9.1が出て少したったし、
Railsも3で少し落ち着いてほしいな。もうかなり充実してるし。
0315nobodyさん2009/06/15(月) 14:28:22ID:???
ttp://qwik.jp/asakusarb/010_log.html#179f851c7dd320f1cd5999d343e24f83
# Rails 3.0のRuby 1.9対応がひどい件
0316nobodyさん2009/06/15(月) 14:53:49ID:???
>>311

http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3
> The probably-overly-optimistic goal is to have at least a beta version ready
> for RailsConf 2009 in Las Vegas.

probably-overly-optimistic
beta

なお、RailsConf 2009 in Las Vegas は5月アタマだった。
0317nobodyさん2009/06/15(月) 16:53:13ID:???
>>313

environmentの意味を考えれば、
行儀が悪いというよりやってはいけないんじゃないだろうか。
それだったら最初に読むファイルは1個でいいように思う。
0318nobodyさん2009/06/15(月) 18:48:13ID:???
>>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のどこかだとは思うのですが…
0319nobodyさん2009/06/15(月) 18:59:00ID:???
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"

見たいにする方法です。
しかし、何かスマートじゃないような…。
もっとスマートな方法はないものでしょうか?
03203192009/06/16(火) 07:26:15ID:???
>>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"
でした。
よく考えたら、<<で後ろに文字列つければいけるのかな…
0321nobodyさん2009/06/16(火) 10:23:15ID:???
>>315
どうひどいのかその資料からじゃさっぱり分からんな
資料というかメモ書きみたいな感じだが
0322nobodyさん2009/06/16(火) 12:44:13ID:???
>>318
なんでわざわざくっつけてからまた分解してまたまたくっつけ直すんだよ。
0323nobodyさん2009/06/16(火) 15:34:20ID:???
今はじめてJSONを使った。

こんなに便利だとは・・・。
今までajaxやるときは鯖からxml返して、ブラウザ側でxmlをパースしてたよ・・・。
0324nobodyさん2009/06/16(火) 15:37:41ID:???
>>323
今はいろんな言語で JSON を扱えるから、
サーバサイドの言語が変わっても移行しやすいだろうね。
0325nobodyさん2009/06/16(火) 18:39:01ID:???
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

シリアライズ後のサイズを見たいのです。
0326nobodyさん2009/06/16(火) 19:21:35ID:???
> サーバサイドの言語が変わっても移行しやすいだろうね。

マイクロソフト涙目w
03273192009/06/16(火) 19:25:39ID:???
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
0328nobodyさん2009/06/16(火) 20:30:24ID:???
すいません、Passengerってデプロイ時の再起動はいらないと聞いていたのですが、実際どうなのでしょうか?

↓こちらのサイトではtmp/restart.txtを生成して再起動しているのですが、必要ないものなのでしょうか?
PassengerとcapistranoでのデプロイTips - diaの備忘録
http://d.hatena.ne.jp/DianthuDia/20080829/1219969683
0329nobodyさん2009/06/16(火) 20:35:03ID:???
>>328
capistrano は使ったことがないので知らないが、
生(?)で Passenger を使っている。

ソースを更新したとき、Passenger は、Apache の再起動はいらないけど、
RAILS_ROOT/tmp/restart.txt を touch してタイムスタンプを変えておく。
すると、次回の http request 時に、ソースを再読み込みする。

>>328 のページを斜め読みしたけど、なかで touch tmp/restart.txt をやっているようだけど?
0330nobodyさん2009/06/16(火) 20:43:09ID:???
>>325
unserializeを通ると@attributesの中身自体が差し替えられてしまう。
で、読み取り系はことごとくunserialzieを通ってしまう。

そうなる前に
u.instance_variable_get(:@attributes)[:data]
でどうか。

行儀よくないけど。
0331nobodyさん2009/06/16(火) 21:58:34ID:???
capistranoとかでデプロイする時
バックアップとかも同時に出来るの?
0332nobodyさん2009/06/16(火) 22:20:53ID:???
デフォルトのdeployだと、リリースごとにrelease/タイムスタンプ
というディレクトリに配置され、currentという名前で最新バージョンに
シンボリックリンクが張られる。
で、rollbackというタスクで前のバージョンに戻せる。
まー、これで不足ならタスク書けばだいたいのことはできるよ。
0333nobodyさん2009/06/17(水) 10:23:35ID:???
>>329
「再起動はいらない」ってapacheの再起動のことなんですね。
Passengerは touch tmp/restart.txt で再起動させるようにしてみます。
0334nobodyさん2009/06/17(水) 16:39:38ID:???
a というテーブルに b.id 用の FK である a.b_id を追加しようと思っています。

ruby script/generate migration AddAsToBsId b_id:text

すると、rake db:migrate で bs_id というテーブルに追加しようとします。
どのように書けばいいでしょうか。
03353342009/06/17(水) 16:53:33ID:???
自己解決しました。

ruby script/generate migration AddBsIdToAs b_id:text

と書くべきでした。
0336nobodyさん2009/06/17(水) 18:16:17ID:???
下記エラーが出るのは 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.[]

テーブルを削除せず、うまくやる方法はないものでしょうか。
0337nobodyさん2009/06/18(木) 10:58:31ID:???
Railsというのはruby以外のほかの言語も同時に使えるのでしょうか?


WEBアプリケーションの開発を楽にしてくれるだけで
基本的にRubyなんですか?
rubyに出来ないことはRailsにも出来ないということでしょうか?

Railsはjavascriptとかajaxとか
ウェブアプリを開発する上で
rubyとほかの言語も一緒に書くように出来るプラットフォームみたいな物なのでしょうか?

rubyという言語がjavascriptとかの言語も一緒に使える物なのか?
それとも
railsがほかの言語も使えるようにプラットフォームが整備されている物なのか
どうなんでしょうか?
0338nobodyさん2009/06/18(木) 11:02:06ID:???
学校の宿題なら宿題スレにいけ
0339nobodyさん2009/06/18(木) 11:23:55ID:???
JavaScript を調べるとスッキリするだろうね
0340nobodyさん2009/06/18(木) 14:48:28ID:???
先輩方に質問です!
関連するモデルが存在する場合に、モデルの削除を禁止したのですが何か方法はありますか?
例えば、自分のモデルのデータを削除したい時、関連相手が自分に対してbelongs_toしている場合は
削除できないようにしたいのです。
0341nobodyさん2009/06/18(木) 14:53:02ID:???
アプリで制御したいのかDBの制約でいいのかわからんな
DBの制約でいいならDBMSを追記・・・というかDBスレへ
アプリの制御なら普通にIFじゃダメなのか?
0342nobodyさん2009/06/18(木) 17:02:39ID:ZZEBh1dd
作ったアプリを海外VPSで動かしはじめて2ヶ月くらい。
システムを更新するたびに、面倒くさい思いをするんだけど、みんなどう更新してるの?
俺は今FTPサーバを構築して、サーバのファイルをそのまま上書きuploadしてるw
そしてapache再起動(passengerです。)

tracとかsvn使ったことないんだけど、ブラウザ上でソース変更して、保存してapache再起動したら
OK!みたいなことできるんだろうか。
0343nobodyさん2009/06/18(木) 17:11:57ID:???
>>342
Railsデプロイよめば?
0344nobodyさん2009/06/18(木) 17:18:35ID:???
>> 341
ActiveRecordの機能としてあるかどうか知りたかったんです。
削除対象のオブジェクトに関連しているモデルの存在チェックを行ってから
何も無ければ削除するようにしたいんです。
0345nobodyさん2009/06/18(木) 17:27:31ID:???
サイトごとに異なる設定はどこに書けばよいのですか。
ffmpegを使いたいのですが、ffmpegのパスを定数として
MyFfmpeg::BIN = '/usr/local/bin/ffmpeg'
このように設定したいのです。
これをどのファイルに書けばいいのですか。
initializers の下に ffmpeg_helper.rb を作ってそこに書いてみたのですが
test のときはいいのですが development ではロードされませんでした。
0346nobodyさん2009/06/18(木) 17:32:31ID:???
>>343
ググってみた。

Railsアプリケーションをデプロイしようとするとさまざまな問題が生じるため、
Railsアプリケーションの開発は好きだけれどもデプロイは嫌いという技術者は少なくありません。
本書はアプリケーションのデプロイ時に技術者が直面するさまざまな問題の解決策を体系的にまとめた
Railsデプロイガイドです。
本書ではまずRailsアプリケーションのデプロイを家探しにたとえて解説します。
そして、一連のデプロイ処理の中で、Railsアプリケーションのホスティング方式の選択、デプロイの自動化、
サーバ管理、クラスタリング手法といった高度なトピックについて詳しく解説します。

3000円。

欲しいな〜これ。でもデプロイに1冊の本はやや大げさなきもするなぁ。
0347nobodyさん2009/06/18(木) 18:14:38ID:???
Table.create data みたいに一行 insert したら、
その行の id を取得するにはどうしたらいいでしょうか?
0348nobodyさん2009/06/18(木) 18:28:09ID:???
>>344
has_many と belongs_to が適切に設定されていれば、
categories(1) - items(N)だとすると
category.itemsでモデルの配列を取得できるはずだけど

itemsがあまりにも膨大なレコードの場合は気をつけてね
has_many の before_removeと組み合わせるといいのかも

と思ったら、has_many に :dependent => restrict っていつの間にか増えてるな
これでできるんじゃないだろうか
教えたのだからもし試すのなら報告を義務としたい
そうすることでスレが良くなるから


>>346
おれはそれ買ってデプロイしてるよ。
薄い本だけど3000円は安いと思う。
Subversionなんて古いというやつは少し価値が落ちるかもしれんが。
あとMongrelが中心な感じかな。
0349nobodyさん2009/06/18(木) 19:24:01ID:???
>>346
この本は Passenger が載ってないのが惜しい
(タイミング的にちょっと前だったので)
0350nobodyさん2009/06/18(木) 19:31:33ID:???
メモリが少ないVPSはMongrelの方がいい場合も多いんじゃないだろうか
0351nobodyさん2009/06/18(木) 22:26:17ID:???
>>346
デプロイ面倒なら
クラウドコンピューターでもつかえよ
googleとかaptenaとかamazonとか
アップロード先の設定をしなくてもいいクラウド技術があるだろ
■ このスレッドは過去ログ倉庫に格納されています