【Ruby】Ruby on Rails Part7
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/30(木) 23:07:27ID:???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
0236nobodyさん
2009/06/05(金) 01:51:08ID:???どこでそんなのが必要になるのかさっぱりわからんが、
新規作成時と既存レコードの更新時で変えたいなら方法はある。
0238nobodyさん
2009/06/05(金) 06:58:11ID:???なんか意味が分からない。
validate_on_create、validate_on_update、validate
をモデルに定義するだけじゃ足りないの?
0239235
2009/06/05(金) 08:46:49ID:???>>238
そんなに意味がわからない程珍しいシチュエーションかなー??
DB上は一つのテーブルだから一つのModelなんだけど、カラムによって登録・更新する画面がいくつかに分かれてしまった場合とかってそれなりにあると思うんだが・・・。
ttp://blog.masuidrive.jp/index.php/2008/02/23/rails_valid_columns/#
ttp://www.fraction.jp/log/archives/2008/02/29/Rails_de_Wizard
この辺の記事にもあるけど、ウィザード形式の入力フォームとか。
「じゃあ記事の方法でいいじゃん」って事かもしれんが、上の記事の方法だと一回全部 validate が実行されるし、
下の記事は API ドキュメントにある方法だけど、明示的に Controller からどの画面かを渡してるのが微妙だな、と思って、
他になんか方法がないかなー、と。
0240nobodyさん
2009/06/05(金) 09:22:02ID:???bodyが2画面目で入力されるとして、
class Entry < ActiveRecord::Base
validates_length_of :body, :if => :_body_required?
def _body_required?
!!self.body
end
end
みたいに普通にやれば良いだけじゃないの?
1画面目ではvaildation走らない。
0241nobodyさん
2009/06/05(金) 09:24:07ID:???その値によって入力する内容が変わったりするってことか?
どういうものかイメージがわかないのだが、複数の画面で登録するってことは、
1つのテーブルにまとめてること自体がおかしいというわけではないの?
0242nobodyさん
2009/06/05(金) 10:23:57ID:???自分なら、モデルではなく、バラのセッションデータとして属性値を持ち回って、
ウィザードの最後でモデルを作るという形にすると思う。
0243nobodyさん
2009/06/05(金) 10:30:16ID:???validationをどうするかって話でしょ。
ウィザードの最後でvalidationするの?
0244nobodyさん
2009/06/05(金) 10:42:09ID:???0245235
2009/06/06(土) 00:39:58ID:???みんないろいろなレスありがとう。
とても参考になります。
>>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 にも用意されているのかと思ったんだけど・・・。
そういう事やるためのプラグインとかってあったりする?
0246nobodyさん
2009/06/06(土) 01:13:48ID:???↓(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されまくるからどこのが良さそうか迷うわな。
0247235
2009/06/06(土) 02:00:03ID:???errors.on(:body) で特定カラムにエラーがあったかどうかチェックできるのか・・・これは知らなかった!
この書き方だと確かにシンプル且つ画面との結合がControllerだけに押さえられそうだね。
valid? 呼んじゃってるから validation が一旦全部実行されちゃう、ってのを無視できる箇所ならこれで良さそう。
validate_attributes ってプラグインがあるんだね。
検索してみたら日本の人が作ったのがあるみたい。
ttp://blog.imishin.com/projects/ruby/validattributes/#
ttp://github.com/kusakari/valid_attributes/tree/master
今年5月くらいにも更新入ってるようなので、メンテはされてそう。
サイトを見る限りなかなか良さそうなので、時間見て触ってみるよ!!
0248nobodyさん
2009/06/06(土) 02:42:03ID:???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フィールドでエラーが生じていることを確認しています。これは一種のイディオムとして覚えてください。
0249nobodyさん
2009/06/06(土) 05:57:25ID:???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鍵接続
0250nobodyさん
2009/06/08(月) 08:19:40ID:???比較的日本語のせつめいもあるからね
0251nobodyさん
2009/06/08(月) 10:27:16ID:???0253nobodyさん
2009/06/08(月) 11:11:23ID:???0254251
2009/06/08(月) 11:27:36ID:???252 的なつまらん回答としては
xrea に Rails や、GAE を JRuby on Rails とかかなぁ。
0255nobodyさん
2009/06/08(月) 11:29:14ID:???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 を指定する必要がありそうな感じなのですが、
どうしたらいいでしょうか。
0257nobodyさん
2009/06/08(月) 14:42:45ID:???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
0260251
2009/06/08(月) 14:57:16ID:???DB 5M までなら今も無料です。
ただ、5M は小さすぎて。
ttp://heroku.com/pricing#blossom-1
>>259
ありがとうございます。
DB も MySQL/PostgreSQL が用意されていてすごいですね。
0262249
2009/06/08(月) 15:59:55ID:???謎をとくべく、リポジトリのパスが何故バックスラッシュが円記号になってしまうのか、該当箇所が見つからず困ってます…。
リポジトリのパスが 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メソッドが呼ばれているまではわかりました。
円記号への変換ルーチンが見つからないよヽ(`Д´)ノ ウワァァン!!
0263249
2009/06/08(月) 16:31:58ID:???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:???これってファイルを更新したくなったらどうするんですか?
ユーザ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:???全体像がつかめません。
どうしたら、どのファイルが必要であるかわかったり、
ファイルごとの関連性がわかるなど
全体像をつかむことが出来ますか?
0266nobodyさん
2009/06/09(火) 18:01:27ID:???I/O BOOKSの「はじめてのRuby on rails2」がおすすめ。
慣れるとまったく読むことの無い本になるけど、
非常に簡単に説明してくれるので、まずつまづくこと無くサンプルアプリが組めるはず。
学習の最初に火種にいい本だと思ってる。
他はレシピブックが個人的には神だった。
Ruby on rails Webアプリケーションスーパーサンプルは駄目だった。
0267nobodyさん
2009/06/09(火) 18:40:55ID:???今まさにこれで勉強してる訳だが(´;∀;)
0268nobodyさん
2009/06/09(火) 18:45:52ID:???あ、すまん。つい
0269nobodyさん
2009/06/10(水) 00:00:25ID:???ごめん、「駄目」って言い方悪かった。
最初にその本から始めたんだけど、俺の頭が悪くて理解不能だった。
「はじめてのRuby on rails2」は、相当ハードル下げてくれてるから
(その分進みが遅くて内容が薄い)、俺でも理解できた。
> Ruby on rails Webアプリケーションスーパーサンプル
は、バージョンが1.3なのがマイナスだけど、ある程度理解した状態で読んだら
普通にいい本だったよ。
0270nobodyさん
2009/06/10(水) 01:15:45ID:???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:???やりたい事がアップロードできるファイルの種類の制限(画像のみ)やファイルサイズ
だけなら、簡単そうだからプラグインのソースを直接修正すればいいと思うよ。
0272nobodyさん
2009/06/10(水) 10:51:34ID:???0273nobodyさん
2009/06/10(水) 11:08:18ID:???一回アップロードされるのはRailsのプラグインだと、
いまのところ仕方ないこと。
アップロード後にvalidationかけてはじく。
仕事で使うとどうしても確認画面入ってくるから、
そういう場合はいまだfile_column一択になってしまう。
0274nobodyさん
2009/06/10(水) 11:22:05ID:???仕事で Rails 使っている人発見!
入力→確認→登録の流れをどう実装していますか。
登録画面にも確認画面を表示しているならその方法や、
確認→登録の hidden は何か特別なこととかしてるかとか。
0275nobodyさん
2009/06/10(水) 11:47:43ID:???確認画面JavaScriptでやれとかいう人もいるけど、
ちゃんと画面つくってる。
無理にRESTにこだわる必要なし。
JavaScriptでやると、登録まできちんとしたvalidationできないし。
値はsessionで持ち回し。まぁ、他の言語でも普通な方法。
hiddenだと、確認→登録の時にもvalidationしなきゃいけないので。
0277nobodyさん
2009/06/10(水) 13:04:17ID:???どうもです。
↓とりあえずこれでファイルの種類特定するようにしますた。
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:???入力→確認 のときにvalidationかけてセッションに入れる。
エラーが出たら、入力に戻す。
確認→登録 のときは、すでにvalidationが通ってるから大丈夫。
登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
0282nobodyさん
2009/06/10(水) 15:32:42ID:???まあ、そう単純じゃない場合も良くあるんだよねえ。
すると、テンプレにしてもプラグインにしてもすべてのケースを網羅
できそうもないわけですね。
> 登録から入力に戻すってのは、一画面余計に通ることになるので避けたい。
redirect_toするだけじゃないの?
0283nobodyさん
2009/06/10(水) 15:43:46ID:???入力→確認→登録(エラー)→入力
よりは、
入力→確認(エラー)→入力
の方が、余計な確認画面とおらなくて良いって話でしょ。
0284nobodyさん
2009/06/10(水) 16:25:24ID:???<% 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:???結局は手動で直すしか…。
仕事でやってると、デザイナの上げてきたデザインはめるのが辛い。
0288nobodyさん
2009/06/11(木) 14:43:46ID:???あとサーバ不要でpartialできる仕組みを各ブラウザに持たせてデザイナの
成果物をそのまま使えるようにできないものだろうか。
<include partial="./footer.html" />
それか、Rails実行環境とSVNクライアントを
ブラウザのプラグインレベルで提供。でざいなさんもerbやってもらう。
0289nobodyさん
2009/06/11(木) 15:13:57ID:???そんなに複雑なロジックをテンプレートに埋め込んでるの?
0290nobodyさん
2009/06/11(木) 17:25:37ID:???Railsだとフォーム関連のタグが全部ヘルパになってるし、
タグにclass一個付けるにも引数にしなきゃいけないので
その辺でダメだったみたい。
他にも便利な独自ヘルパ作ってる場合(ビューの一部がヘルパに行ってる)や、
Ajaxでコントローラ内にRJSを入れていて、
そこにHTMLが入って来たりすることもある。
別にテンプレートにロジックが入ってる訳じゃなくても
デザイナには難しいみたいよ。
0291nobodyさん
2009/06/11(木) 18:31:40ID:???あと、たとえやってくれても、
erb のタグとか消してしまっていて、
確認をしないといけないから
開発者の手間があんまり変わらないし。
0292267
2009/06/11(木) 19:47:21ID:???悩んでたんだけど2.0から変わってたのね・・・情報古いわ・・・
0293nobodyさん
2009/06/11(木) 20:12:53ID:???ところで、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と画像が用意出来れば十分な時代でもないのに。
0296nobodyさん
2009/06/12(金) 09:02:22ID:???相手が理解できないならまず自分の教え方に問題がないか振り返らないと
代入のやり方とヘルパーの機能をまとめたものを渡せばある程度なんとかなるんじゃないだろうか
あとは分岐と繰り返しだけど、繰り返しは自動生成されるやつそのままでいけるだろうし
分岐も何回かやれば、簡単なIF文は身につくような
まあ、デザイナーに教えたことないから完全に脳内シミュレーションで
実際はイライラするのかもしれないけど
0297nobodyさん
2009/06/12(金) 12:39:20ID:???>>290 みたいにデザインすべき要素があちこちに分散していて
全体の把握がしずらいみたい。
開発側でデザインはめて、はめた後のものを少し修正ならできた。
あと開発側としても、デザイナにerb触らせて動かなくなったりするのが
怖いというのがある。
0298nobodyさん
2009/06/12(金) 13:04:00ID:???ほんとに。Smartyわかってもダメなのか。
ヘルパーって調べるのとか結構時間がかかって
面倒とか思ってるのはおれだけだろうか。
でもあると使いたくなるし、後で使ってないところを見つけると直したくなる。
いっそごそっとなくなってくれれば楽なのかもとたまに思う。
相当役に立つやつは残してほしいが。
0301nobodyさん
2009/06/13(土) 03:57:58ID:???HTMLのタグとかも理解せずにDW弄ってる奴らだし。
ちゃんとALTタグ設定してるの見た事無い。orz
0302nobodyさん
2009/06/13(土) 05:18:17ID:???0304nobodyさん
2009/06/13(土) 21:38:32ID:eLQY8eGW0305nobodyさん
2009/06/13(土) 22:13:41ID:???lib/string_ext.rb
かな。
0306nobodyさん
2009/06/13(土) 22:51:14ID:???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:???「初期化」じゃないからきっと行儀が悪い気がする。
0308nobodyさん
2009/06/13(土) 23:35:49ID:???おれならたぶんそこに置く。というか実際置いてる。
使うときに何の宣言もいらないし。
初期化って「本処理が始まる前にやっておくべきもの」だから、
それほど行儀が悪いということはないんじゃないだろうか。
0309nobodyさん
2009/06/15(月) 11:54:46ID:???はやくしてくれ〜
0312nobodyさん
2009/06/15(月) 14:08:27ID:???3.0 系列になったら、またごっそり変わるのか・・・・
0313nobodyさん
2009/06/15(月) 14:09:49ID:???自分は、config/environment.rb に、
class << String
〜
end
みたいに再定義していたんだけど、この方法はお行儀悪いでしょうか?
0314nobodyさん
2009/06/15(月) 14:16:41ID:???おれは歓迎だけど。ただ1.9.1が出て少したったし、
Railsも3で少し落ち着いてほしいな。もうかなり充実してるし。
0315nobodyさん
2009/06/15(月) 14:28:22ID:???# Rails 3.0のRuby 1.9対応がひどい件
0316nobodyさん
2009/06/15(月) 14:53:49ID:???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:???environmentの意味を考えれば、
行儀が悪いというよりやってはいけないんじゃないだろうか。
それだったら最初に読むファイルは1個でいいように思う。
0318nobodyさん
2009/06/15(月) 18:48:13ID:???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:???複数行のmysqlコマンドを実行したいものなのですが…
とりあえず、思いついたのは、ファイルにいったん出力する方法です。
sql = <<-
(sqlいろいろ)
EOF
put sql, "#{shared_path}/db/tmp.sql"
run "mysql hage_db -u hoge -p unkopass << #{shared_path}/db/tmp.sql"
見たいにする方法です。
しかし、何かスマートじゃないような…。
もっとスマートな方法はないものでしょうか?
0320319
2009/06/16(火) 07:26:15ID:???ごめんなさい。
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"
でした。
よく考えたら、<<で後ろに文字列つければいけるのかな…
0323nobodyさん
2009/06/16(火) 15:34:20ID:???こんなに便利だとは・・・。
今までajaxやるときは鯖からxml返して、ブラウザ側でxmlをパースしてたよ・・・。
0325nobodyさん
2009/06/16(火) 18:39:01ID:???*_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
0327319
2009/06/16(火) 19:25:39ID:???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:???↓こちらのサイトではtmp/restart.txtを生成して再起動しているのですが、必要ないものなのでしょうか?
PassengerとcapistranoでのデプロイTips - diaの備忘録
http://d.hatena.ne.jp/DianthuDia/20080829/1219969683
0329nobodyさん
2009/06/16(火) 20:35:03ID:???capistrano は使ったことがないので知らないが、
生(?)で Passenger を使っている。
ソースを更新したとき、Passenger は、Apache の再起動はいらないけど、
RAILS_ROOT/tmp/restart.txt を touch してタイムスタンプを変えておく。
すると、次回の http request 時に、ソースを再読み込みする。
>>328 のページを斜め読みしたけど、なかで touch tmp/restart.txt をやっているようだけど?
0330nobodyさん
2009/06/16(火) 20:43:09ID:???unserializeを通ると@attributesの中身自体が差し替えられてしまう。
で、読み取り系はことごとくunserialzieを通ってしまう。
そうなる前に
u.instance_variable_get(:@attributes)[:data]
でどうか。
行儀よくないけど。
0331nobodyさん
2009/06/16(火) 21:58:34ID:???バックアップとかも同時に出来るの?
0332nobodyさん
2009/06/16(火) 22:20:53ID:???というディレクトリに配置され、currentという名前で最新バージョンに
シンボリックリンクが張られる。
で、rollbackというタスクで前のバージョンに戻せる。
まー、これで不足ならタスク書けばだいたいのことはできるよ。
0333nobodyさん
2009/06/17(水) 10:23:35ID:???「再起動はいらない」ってapacheの再起動のことなんですね。
Passengerは touch tmp/restart.txt で再起動させるようにしてみます。
0334nobodyさん
2009/06/17(水) 16:39:38ID:???ruby script/generate migration AddAsToBsId b_id:text
すると、rake db:migrate で bs_id というテーブルに追加しようとします。
どのように書けばいいでしょうか。
0335334
2009/06/17(水) 16:53:33ID:???ruby script/generate migration AddBsIdToAs b_id:text
と書くべきでした。
0336nobodyさん
2009/06/17(水) 18:16:17ID:???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.[]
テーブルを削除せず、うまくやる方法はないものでしょうか。
■ このスレッドは過去ログ倉庫に格納されています