Rails 模型在 Capistrano 部署上未更新



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

事情

是这样的:我有一个模型 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

和环境.rb:

# Load the rails application
require File.expand_path('../application', __FILE__)
# Initialize the rails application
MyApp::Application.initialize!  

和应用程序.rb:

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

所以我已经没有想法了...该应用程序是使用 capistrano 部署的,我使用的是 Rails 3.0.10。

更新

好吧,所以我解决了这个问题,老实说很愚蠢,应用程序/内有一个模型.bak文件夹,有人创建了,在生产中,模型是从该文件夹中拾取

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

您可能需要设置一个卡皮斯特拉诺食谱来执行此操作。我相信过时的数据库架构可能会导致此错误。

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

尝试手动重新启动独角兽

您必须

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

相关内容

  • 没有找到相关文章

最新更新