【问题标题】:Rails Model Not Updating on Capistrano deployment在 Capistrano 部署中,Rails 模型未更新
【发布时间】:2012-08-10 04:02:28
【问题描述】:

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

这是怎么回事:我有一个模型奖励.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

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

更新

好的,所以我发现了问题,说实话很傻,app/ 中有一个models.bak 文件夹是有人创建的,在生产中模型是从那个文件夹中获取的

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我相信架构是最新的,不过我会再次检查,谢谢
    • 是的,架构是最新的,还有其他想法吗?
    【解决方案2】:

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

    【讨论】:

    • 是的,正如问题中提到的,服务器上的reward.rb文件中确实有方法
    【解决方案3】:

    尝试手动重启独角兽。

    【讨论】:

    • 我认为控制台与服务器无关,所以我认为这不是问题
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多