Rails模型未在Capistrano部署上更新

时间:2012-08-10 04:02:29

标签: ruby-on-rails ruby ruby-on-rails-3 capistrano

好吧所以我花了相当多的时间用这个,但仍然无法找出问题所在。

以下是最新消息:我有一个模型reward.rb,方法X是这样的:

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

如果你做了

,rails app现在正处于开发中的生产环境中
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

所以我的想法已经用完......应用程序部署了capistrano,我正在使用Rails 3.0.10。

更新

好吧,所以我想出了问题,说实话,相当愚蠢,应用程序内部有一个models.bak文件夹/有人创建,在制作时模型被从该文件夹中拾取

4 个答案:

答案 0 :(得分:0)

您是否在部署服务器上运行数据库迁移?

您可能需要设置capistrano配方才能执行此操作。我相信过时的数据库架构可能会导致此错误。

答案 1 :(得分:0)

一个愚蠢的问题:你检查过服务器上的 reward.rb 文件了吗?它是正确的(新)版本吗?

答案 2 :(得分:0)

尝试重新启动unicorn o手动操作。

答案 3 :(得分:0)

您必须执行rails c production才能运行生产环境。