• ベストアンサー
  • すぐに回答を!

Ruby on Rails ; model validationが動作しない等

昨日から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コマンドの発行が必要? ただしい移行方法をどなたか教えていただけませんか?

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数857
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.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を入れているのではないかと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • ruby on railsのエラーについて

    今、「ruby on rails」の勉強をしています。で、エラーについて質問なんですが、「ruby script/generate scaffold Article Admin」とコマンドプロンプト上で入力したのですが参考サイトのようにできません。 私の場合は、「対象のコンピュータによって拒否されたため、接続できませんでした。 - connect(2)」と最後にでて失敗します。 どうしたらうまく実行することができるのでしょうか?? 参考サイト(サイト上部): http://www008.upp.so-net.ne.jp/letitbe/rails003.htm

  • Ruby on Rails について

    Ruby on Railsでアプリケーションを作ります。 バージョンは:InstantRails-2.0-win 1、データベース表の作成: データベース名:myapp   テーブル名:peoples データベースを作成したら、MySQLを再起動します。 2、新規アプリケーションの作成: アプリケーション名:myapp Instant RailsウィンドウのIボタン⇒Rails Applications⇒Manage Rails Applicationsをクリックします。 Rails ApplicationsダイアログボックスのCreate New Rails App・・をクリックします。 コマンドプロンプト画面が表示されます。 rails myapp を入力します。 コマンドプロンプトのプロンプトが入力状態になって、コマンドプロンプトを閉じます。 Rails ApplicationsダイアログボックスのRefresh Listボタンをクリックしたら、myappアプリケーション名が追加されます。 3、アプリケーション・モデルの作成: InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ config ⇒ datebase.yml ファイルを開きます。 ↓に書き換えます。 development: adapter: mysql database: myapp timeout: 5000 username: root host: localhost   Instant RailsウィンドウのIボタン ⇒ Rails Applications ⇒ Open Ruby Console Windowをクリックします。 コマンドプロンプトが開きます。 cd myapp ruby script/generate model people を入力します。 4、コントローラの作成: コマンドプロンプトを開きます。 cd myapp ruby script/generate controller people を入力します。 コマンドプロンプトを閉じます。 InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ app ⇒ controllers ⇒ people_controller.rb ファイルを開きます。 class PeopleController<Application Controller scaffold :people ←←追加した行です。 end 5、新しいアプリケーションを起動 Rails ApplicationsダイアログボックスのRails Applications 欄の myappの所をチェックし、Start with Mongrelボタンをクリックします。 コマンドプロンプト画面が起動し、ポート番号が表示されます。 Webブラウザを起動し、アドレス欄に 一つは: 「http://localhost:people/list」を入力し、Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#list undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp   一つは: http://localhost:3000/people Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#index undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp どこの手順が違ってるのが解らなくて、 Errorの解決方法ですごく困ってます。 どうかご指導をお願いいたします。 もう一つはErrorメッセージの3行目は C:/taiyo/INSTAN~1.0-W/rails_apps/myappですけど、 InstantRails-2.0-winフォルダのはずですけど、 INSTAN~1.0-Wフォルダになった原因がよくわからないです。 すごく困ってます。 ご指導お願いいたします。

  • scaffold

    Ruby on Rails に関して質問です。 scaffoldができません。 #rails rn2 -d mysql でrn2というDBができるのらしいですが、mysqlにログインしてDBを確認しても見つかりませんでした。 そもそも #ruby script/generate scaffold hogehoge name:string id:integer という記述を実行し、テーブルを作ろうとしていて、 「Missing the Rails 2.3.2 gem. Please `gem install -v=2.3.2 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.」 となった問題を解決しようとしています。 railsは2.3.2で入っているのにこのエラーメッセージが表示されました。 参考になるサイトを教えていただけると幸いです。 よろしくお願いします。

その他の回答 (4)

  • 回答No.4
  • dekopa-
  • ベストアンサー率42% (161/378)

#2です。 #3さんの回答をみて気づいたんですが、#2の回答でupされたコードと内容、なんだかおかしいですね… >編集などeditではvalidationが動作するのに新規のnewだと動作しません。 validateが起きるのはsaveが呼ばれた時です。 http://d.hatena.ne.jp/keyword/Agile%20Web%20Development%20with%20Rails は読んでいますか?保存時にafter_やbefore_やvalidateが呼ばれる順番が書いてあるのですが。 def createやdef updateで、saveが呼ばれたときにvalidateが呼ばれるかどうか確認してください。 呼ばれるなら、それが正常です。 こちらの勘違いなら、せめてソースをひと揃い晒してください。

共感・感謝の気持ちを伝えよう!

  • 回答No.3

2番目の件についてです。 同じ状態になったので色々と検証してみたのですが、 新規作成時に使用するのは hoge.createまたはhoge.save で、 修正時に使用するのは hoge.updateまたはhoge.save が一般的かと思います。 自分の場合も新規作成時にエラーが出たので hoge.createと書いていた部分を全てhoge.saveに書き換えたら 問題なくvalidationが動くようになりました。 # 何らかの条件下で、ActiveRecordのvalidates_*_ofが # create時に実行されないのかもしれないです。 # バージョンの問題なのか環境の問題なのかは謎。 一度、gem listで、新旧両方の環境にインストールされている リストを出して、バージョンを比較されてみるといいかもしれません。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • dekopa-
  • ベストアンサー率42% (161/378)

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が呼ばれるのでしょうか?

  • 回答No.1
  • dekopa-
  • ベストアンサー率42% (161/378)

基本的に、ファイルの移行だけで動くはずですが。他が同じなら。 1.railsのインストールはできているか?(gemは実行した?) 2.OS環境は一緒か?(パスやコードセットなど) 3.DBは作成済みか。バージョンは一緒か、コードセットは一緒か。 後は、開発モードに依存する書き方をしていないか、とか

共感・感謝の気持ちを伝えよう!

質問者からの補足

返信ありがとうございます。 1,2,3全てokです。 validateが動くものと動かないものがあり大変困っています。

関連するQ&A

  • Railsで作ったものにdispatch.cgiがない

    Ruby on Railsで作成したものをApacheで動かそうとしたのですが、 「public/dispatch.cgi」などのファイルが存在しませんでした。 「.htaccess」も作成されていないようです。 InstantRails(Rails 2.0.2)で作成したものには上記ファイルは存在します。 何か必要なものがあるのでしょうか? 環境 -Windows XP + coLinux -Debian 5.0.2 -ruby 1.8.7 -rails 2.3.3 railsはapt-getとgemと両方入れています。 (どこかのサイトを参考にしたのですが、失念してしまいました・・・。) 入力 $ cd /var/www/rails $ rails myapp $ cd myapp $ script/generate scaffold note line:string $ rake db:migrate ls -a publicの結果 . 404.html 500.html images javascripts stylesheets .. 422.html favicon.ico index.html robots.txt

  • FC2 ブログで動作しない jQuery

    http://www.texotela.co.uk/code/jquery/newsticker/ を参考にページを作成して、ウェブに公開したら、思い通りに動作する様になったのですが、いざ、使用目的先の FC2 ブログに移行すると、どうやっても正常に動作しません。一体何が原因なのでしょうか?FC2 ブログ以外の FTP サーバーにアップロードしたのは正常にフェードアウトして、テキストが変わるのですが、FC2 ブログの場合は、リストのマークが表示され、フェードしないで、項目が全て表示されてしまいます。 ヘッダにソースを入れ <script type="text/javascript" src="http://xxx.xxx/headlines/jquery_min.js"></script> <script type="text/javascript" src="http://xxx.xxx/headlines/jquery_newsticker.js"></script> <script type="text/javascript"> $(document).ready( function() { $("#news").newsTicker(); parseSamples(); } ); </script> CSS をスタイルシートに入れ ボディに <ul id="news"> <li>項目1</li> <li><項目2</li></ul> を入れてるのですが、フェードしたり、リストのマークが消えなかったり、項目の一覧が表示されて、望み通りの結果が出ません。FC2 ブログでは利用出来ないのでしょうか?

  • Wordpressメンテナンスの開発環境についてで

    はじめまして。 Wordpressでじぶんのホームページは作っているのですが、先日友人にメンテナンスを頼まれました。 ちゃんとしたホームページなので 1.開発環境で友人HPをコピー 2.開発環境で修正 3.友人に確認してもらう 4.本番環境バックアップ 5.本番移行 上記手順がよいと思っているのですが、 開発環境に友人のHPをコピーする方法は何かあるか? バックアップにオススメは何かありますか? 本番移行の方法は何かあるのか? など教えていただけないでしょうか。 自分のページは直接好きにさわってますが、 友人は個人営業している会社のものなので 慎重にやらないとと思って、戸惑っています。 他にもこんな感じがよいなどありましたらご教示願います。 よろしくお願いいたします!

  • Apache handlerの利用方法

    どなたか、Apache handlerを使ったことある方教えてください。 現在、lunarpagesというサーバーを使っていて、サーバー側の不具合後、急にphpが動作しなくなりました。 もしかしたらと思って、Apache handlerというのがコントロールパネルにあるのですが、そこでは、 User Defined Handlers   htaccess  cgi-script System Defined Handlers   .cgi .pl cgi-script   .fcgi fastcgi-script   .shtml server-parsed と表記されてるのですが、これはphpが使えなくなったことに関係があるのでしょうか?その場合、addという追加する箇所があるのでそこからどのように追加設定をすればよいでしょうか? よろしくお願いします。

  • pg_dumpではかれたテキストファイルを実行もデータの移行失敗

    DBを開発環境から、本番環境へ移行する際、pg_dumpではかれたデータを元に、pg_restoreで復元しようとした所、エラーが出て、うまくいかず。pg_dumpをtxt形式で出力させ、それを実行させました。 結論から言うとテーブルは全て作成されましたが、データの移行が出来ていませんでした。エラーは出ていませんが、COPYコマンドがうまくいっていないようでした。 開発環境がPostgres8.xで本番環境がPostgres7.4.3なのが影響している可能性が高いと判断してますが、どなたかわかる人はおりませんでしょうか。

  • jqueryとlightboxが一緒に動作しない

    jqueryとlightboxを1頁内に記述しているのですが、どちらか一方だけしか動作しません。 jqueryの記述の箇所とlightboxの記述の箇所を上下させると片方が動作し、片方が動作しないという具合です。 最後に設定した方が実行されるようです。どこを修正すればいいのかまったくわかりません。 両方動作させることはできませんか? ソースコードは以下のようになっています。 <?xml version="1.0" encoding="shift_jis"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="content-script-type" content="text/javascript" /> <meta http-equiv="content-style-type" content="text/css" /> <meta name="Keywords" content="XXX,XXX" /> <meta name="Description" content="XXX,XXX" /> <title>XXXXXX</title> <link rel="stylesheet" href="style.css" type="text/css" /> <link rel="stylesheet" href="XXX.css" type="text/css" /> <script src="http://code.jquery.com/jquery-1.6.min.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> <!--menu_headクラスを持つp要素にマウスオーバーされた時に、menu_bodyクラスを持つ要素をスライドする--> $(function() {   $("#menu_list p.menu_head").mouseover(function() {     $(this).css({backgroundImage:"url(img/left-side-a.png)"}).next("div.menu_body").slideDown(500).siblings("div.menu_body").slideUp("slow");     $(this).siblings();   }); }); </script> <!-- コメント --> <link href="css/lightbox.css" type="text/css" rel="stylesheet" media="screen" /> <script src="js/prototype.js" type="text/javascript"></script> <script src="js/scriptaculous.js?load=effects,builder" type="text/javascript"></script> <script src="js/lightbox.js" type="text/javascript"></script> <!-- コメント --> <style type="text/css"> /* */ }/* <![CDATA[ */ a img{border:0 none} /* ]]> */ </style> </head> 宜しくお願いします。

  • 現在、インストールされているrubyのバージョンを確認する方法を教えて

    現在、インストールされているrubyのバージョンを確認する方法を教えてください。 下記の件が解決しないので、CORESERVERにruby1.8.7を入れてみました。 ▽railsサンプルがレンタルサーバーで動作しません。どこを見ればよいで... - Ruby - 教えて!goo   http://okwave.jp/qa/q6103754.html ユーザ名@サーバ名:~/ror_app/adbook> ruby script/about About your application's environment Ruby version 1.8.5 (i686-linux) RubyGems version 1.3.5 Rack version 1.1 Rails version 2.3.8 Active Record version 2.3.8 Active Resource version 2.3.8 Action Mailer version 2.3.8 Active Support version 2.3.8 Application root /virtual/ユーザ名/ror_app/adbook Environment development Database adapter mysql Database schema version 20100811200136 で、新たなscaffordディレクトリを作成し、作業を進めようとしたところ、 また分からないことがでてきました。 !!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. と表示されたので、 gem install mysql(もしくは、gem install --remote mysql)と打ったのですが、 ERROR: Error installing mysql: mysql requires Ruby version >= 1.8.6 と表示されてしまいます。 しかし、 ruby -vと表示すると、 ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux] と表示されているので、自分としては、1.8.6以上を入れているつもりなのですが…。 現在、インストールされているrubyのバージョンを確認するには、 ruby -vでは、駄目なのでしょうか?

    • ベストアンサー
    • Ruby
  • classでエラー

    IIS5+PHP4.4.0+MSDEで、開発しているのですが、 テスト環境では、動いていたソースを、本番環境に動かしたら、 Notice: Undefined variable: m_strDBName in C:\xxx.php on line 110 Fatal error: Call to undefined function: mssql_pconnect() in C:\xxx.php on line 119 というエラーが出てしまいました。 もちろん、テスト環境と、本番環境は、同じ環境で、 PHP.iniもコピーしました。(インストールパスも同じです) エラー部分は、 require_once("xxx.php"); で、呼び出し、 class clsXXX { var $m_strDBName; function clsXXX() { $this->$m_strDBName = "mmdb"; return; } } としています。 どうすれば、解決できるでしょうか?

    • ベストアンサー
    • PHP
  • VistaでCGIが動作しなくなった?

    初めまして、PerlでのCGIプログラミング初心者です。 今回、PCを新しく買い替えたので、データの移行作業がやっと終わったところなのですが、 前のPCで正常にできていたCGIプログラムが動作しなくなってしまいました。 現象はCGIプログラムのソースがそのまま表示されてしまうというものです。 初めに、バージョン情報等を記載しますと、 OS:Windows XP Home Edition → Windows Vista Home Premium Apache:apache_2.0.54-win32-x86-no_ssl → apache_2.0.63-win32-x86-no_ssl activeperl:5.8.7.813 → 5.10.0.1005 私がやったことと言えば、10日で覚えるシリーズの本に書いてあったとおり、 httpd.confの内容を書き換えただけなのですが、apacheは正常に動作するのに、 CGIプログラムがそのまま出力されてしまいます。 以下にhttpd.confの書き換え内容を記載します。 Option Indexes FollowSymLinks → Option Indexes FollowSymLinks Includes ExecCGI AllowOverride None → AllowOverride All #AddHandler cgi-script .cgi → AddHandler cgi-script .cgi #AddType text/html .shtml #AddOutputFilter INCLUDES .shtml → AddType text/html .shtml AddOutputFilter INCLUDES .shtml ここは何度も確認しましたし、念のため本に付属のCD-ROMに入っていたファイルを そのままコピーして試したりもしたので、この設定が間違っているということはないと思います。 Apacheが正常に動作して、CGIプログラムが正常に動作しないということは、 この設定以外何がいけないのでしょうか…。また、前のPCでのフォルダ構成や設定とも見直したのですが、 XPだとできてVistaだとできないという認識でいいのでしょうか?変わったところといえば、 ApacheやActivePerlのバージョンとOSくらいですが、バージョンやOSが変わると必要な設定なども やはり変わってしまうのでしょうか。OS関連で調べてみたのですが、有力な情報がなかったので、質問させていただきます。 お手上げ状態です、どなたかご助言をお願いいたします。

    • 締切済み
    • CGI
  • We're sorry, but something went wrong

    初めまして。 Ruby on railsについて質問させていただきます。 http://localhost:3000/membersにアクセスすると「We're sorry, but something went wrong.」と表示されてしまいます。 logファイルでは、 「Status: 500 Internal Server Error could not open database: unable to open database file  C:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb:62:in `check'  … 」と出ており、dbファイルがopenできない状況にあります。 どのようにしたらこれを解決することができるでしょうか? 以下は手順と情報です。 『手順』 1.[rails groupware2]にてRailsアプリケーションを作成 2.SQLite3にてテーブル名“members”を作成し、dbフォルダに入れる。 3.database.ymlでそのdbファイルのパスを入力して変更 4.[ruby script/generate scaffold member name:string acc:string]にて一連のファイルを作成 『情報』 OS :WindowsXP Rails :2.3.5 Ruby :1.8.6 gem :1.3.5 SQLite:3.6.21 思いつく範囲では、 1.DBドライバのインストール時([gem install sqlite3-ruby])に「No definition …」がいっぱい出る。 2.DBファイルまたはそれが格納されているフォルダにアクセス権限が与えられていないかもしれない(ちゃんと許可されてました) が原因のような気がしますがネットで調べると、どうやらそうではなさそうです。ちなみに他のPCで一からインストールし直しても同様のエラーが起きました。海外のページにも目を通しましたが良い解決案が出てないようなのでどなたかご存知でしたら教えてください。

    • ベストアンサー
    • Ruby