Rails + Unicorn问题 - DalliError:无法解组值:未定义的类/模块

时间:2012-12-12 08:05:40

标签: ruby-on-rails-3 heroku shopify unicorn dalli

我有一个Rails 3.1应用程序,它利用Shopify API gem通过ActiveResource获取一些外部数据。我们通过Dalli将这些ActiveRecord模型对象存储在Memcached中,然后在需要时再次读入。

我们可以在运行Thin Web服务器时成功读取这些数据,一切正常。但是,一旦我将Unicorn设置为Web服务器,那么当从Memcached读取模型对象时,我仍然会收到以下错误:

Cache read: shopcache_987102
DalliError: Unable to unmarshal value: undefined class/module ShopifyAPI::Order::ClientDetails
Completed 500 Internal Server Error in 395ms

每次阅读都不会发生这种情况,但通常会成为一个大问题。它只发生在我们产生超过1个Unicorn工作进程时。

下面是我的unicorn.rb文件:

worker_processes 3
timeout 30
preload_app true

after_fork do |server, worker|
  #Re-connect to ActiveRecord
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end
end

我们还激活了以下内容:

config.cache_classes = true

如果我只生成一个Unicorn worker_process(worker_processes 1),那么一切正常。我试过设置config.threadsafe!在application.rb中,这对多个工作者没有帮助。

似乎不需要所需的类/模块,我无法解决原因。

编辑: 我还在我的applicaton.rb文件中添加了以下内容,尝试将gem添加到rails的自动加载路径中,但没有成功:

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

我也像这样添加了application_controller.rb require_dependency'starnify_api':

require 'current_shop_detail'

class ApplicationController < ActionController::Base
  protect_from_forgery
  include CurrentShopDetail
  require_dependency 'shopify_api'

end

但我不确定这是否是执行require_dependency的正确方法,因为缺少的类是:ShopifyAPI :: Order :: ClientDetails

有什么想法吗?谢谢:))

0 个答案:

没有答案