1

さて、私はこれにかなりの時間を費やしましたが、何が問題なのかまだわかりません。

ここで何が起こっているのですか:私はモデルreward.rbを次のようなメソッドXで持っています:

class Reward < ActiveRecord::Base
  def x
    puts "foo" # Method does something...
  end
end

Rails アプリは現在、開発中の本番環境にあります。

rails c

その後

>> r = Reward.new
>> r.x
"foo" # I.e it works...

今、サーバーに入って実行すると

rails c

その後

>> r = Reward.new
>> r.x
NoMethodError: undefined method `x' for #<Reward:0x0000000561fa08>

同じサーバーでreward.rbをチェックすると、メソッドがそこにあることがわかります。実際にはファイルの最初のメソッドです...したがって、Railsがコンソールをロードするときにモデルの最新のコードをロードしていないことがわかります...

Railsのキャッシュと関係があるのではないかと思いましたが、production.rbは次のように述べています:

MyApp::Application.configure do
  config.cache_classes = false     
  config.action_controller.consider_all_requests_local = false
  config.action_controller.perform_caching             = false
  # SMTP settings and other stuff.. not related to caching...
end

そしてenvironment.rb:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
MyApp::Application.initialize!  

そして、application.rb:

module MyApp
  class Application < Rails::Application    
    config.encoding = "utf-8"    
    config.filter_parameters += [:password]
  end
end

だから私はアイデアを使い果たしました...アプリはカピストラーノで展開され、私はRails 3.0.10を使用しています。

アップデート

さて、私は問題を理解しました。正直言ってかなりばかげています。誰かが作成した app/ 内に models.bak フォルダーがありました。本番環境では、モデルはそのフォルダーから取得されていました。

4

4 に答える 4

0

rails c production実稼働環境を実行するには、実行する必要があります。

于 2012-08-15T17:45:14.390 に答える
0

ばかげた質問: サーバー上のreward.rbファイルを確認しましたか? それは正しい(新しい)バージョンですか?

于 2012-08-10T10:00:31.783 に答える
0

展開サーバーでデータベースの移行を実行しましたか?

これを行うには、カピストラーノ レシピを設定する必要がある場合があります。古いデータベース スキーマがこのエラーを引き起こす可能性があると思います。

于 2012-08-10T04:29:04.280 に答える
0

ユニコーンを手動で再起動してみてください。

于 2012-08-10T22:58:24.713 に答える