重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

昨日からRoRで開発している初心者です。
移行するとアプリケーションが動かなくなりました。

開発機でruby on rails + lighttpd + fastcgi にて
rails xxx
ruby script/generate scaffold yyy
・・・
と開発を進めていました。
そして同様構成の本番機に移行したところ、validateが動かないなど
様々な不具合がでています。

移行方法
 本番機でrailsコマンドを実行
 xxx以下のファイルを全てコピー

ファイルをコピーするだけだと動作しないのでしょうか?

不具合:
 1:時々 unknown action がでる
 2:varidate(model/...)が動作しない

対処?
1:script/generateコマンドの発行が必要?

ただしい移行方法をどなたか教えていただけませんか?

A 回答 (5件)

#3です。



#2さんの回答を見て思い出したのですが、
validates_*_of 系はデフォルトで
hoge.save時に呼ばれるようになっています。

ですので、私の想像が正しければ今回の件は以下のような対応で治ります。
(#2で答えた方法だと問題アリでした…)

[誤]-------------------------------------------------
validates_presence_of :day, :timeZone, :message => "は必須入力です"
[正]-------------------------------------------------
validates_presence_of :day, :timeZone, :message => "は必須入力です", :on =>[:save, :create, :update]
-----------------------------------------------------

create時だろうがupdate時だろうが
hoge.saveを使えば良い話ではあるのかもしれませんが、
うちの環境ではpostgreSQLでdumpとrestoreすると
hoge.saveでcreateした時にエラーが出たので
hoge.createにした覚えがあります……


>#2さんへ
恐らく、質問者さんは
script/generate scaffold
を使っており、拡張にActiveHeartsを入れているのではないかと思います。
    • good
    • 0
この回答へのお礼

すっかりあきらめていました。
今更ですがやってみます。
ありがとうございます。

お礼日時:2008/01/28 16:28

#2です。



#3さんの回答をみて気づいたんですが、#2の回答でupされたコードと内容、なんだかおかしいですね…

>編集などeditではvalidationが動作するのに新規のnewだと動作しません。

validateが起きるのはsaveが呼ばれた時です。
http://d.hatena.ne.jp/keyword/Agile%20Web%20Deve …
は読んでいますか?保存時にafter_やbefore_やvalidateが呼ばれる順番が書いてあるのですが。

def createやdef updateで、saveが呼ばれたときにvalidateが呼ばれるかどうか確認してください。
呼ばれるなら、それが正常です。

こちらの勘違いなら、せめてソースをひと揃い晒してください。
    • good
    • 0

2番目の件についてです。



同じ状態になったので色々と検証してみたのですが、
新規作成時に使用するのは
hoge.createまたはhoge.save
で、
修正時に使用するのは
hoge.updateまたはhoge.save
が一般的かと思います。

自分の場合も新規作成時にエラーが出たので
hoge.createと書いていた部分を全てhoge.saveに書き換えたら
問題なくvalidationが動くようになりました。

# 何らかの条件下で、ActiveRecordのvalidates_*_ofが
# create時に実行されないのかもしれないです。
# バージョンの問題なのか環境の問題なのかは謎。

一度、gem listで、新旧両方の環境にインストールされている
リストを出して、バージョンを比較されてみるといいかもしれません。
    • good
    • 0

validateが動く物とそうでない物の差を、ちょっとずつ検証していくしか無いかも。


ここにコードは上げられないですよね?


>後は、開発モードに依存する書き方をしていないか、とか
以前ひっかかったのが、developmentだと動くのにproductionだと動かない、というものです。
developmentは毎回リクエスト毎にロードされるので、変数値が初期化されます。それを前提としたコードが混じっていたのが原因です。

validationが動かない、というのは、呼ばれても正常に検証しないのですか?それとも、呼ばれもしないのですか?
正常動作するモデルとそうでないモデルの差を、順に検証してください。

この回答への補足

とても返信遅くなりまして申し訳ございません。
developmentに戻しても動作しません。。。

validationは呼ばれもしません。

不思議な事がおきました。
編集などeditではvalidationが動作するのに新規のnewだと動作しません。

 いったいどういった順序でvalidationがよばれるのでしょうか?
かなり謎です。

コードの問題とは考えづらいのですが。
<model>

class Hoge < ActiveRecord::Base
set_field_names :name=> '名前'

validates_presence_of :day, :timeZone,
:message => "は必須入力です"

end

<cont>

class HogeController < ApplicationController

def new
@hoge = Hoge.new
end

def edit
@hoge = Hoge.new
end

end



すごく初心者な質問なのですが、
viewからどういった順序でmodelが呼ばれるのでしょうか?

補足日時:2007/05/17 16:37
    • good
    • 0

基本的に、ファイルの移行だけで動くはずですが。

他が同じなら。

1.railsのインストールはできているか?(gemは実行した?)
2.OS環境は一緒か?(パスやコードセットなど)
3.DBは作成済みか。バージョンは一緒か、コードセットは一緒か。

後は、開発モードに依存する書き方をしていないか、とか

この回答への補足

返信ありがとうございます。

1,2,3全てokです。

validateが動くものと動かないものがあり大変困っています。

補足日時:2007/05/10 02:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!