Memcache在生产中工作但在本地失败

时间:2012-01-06 03:53:28

标签: ruby-on-rails ruby-on-rails-3 heroku memcached

我正在和朋友一起开发应用程序,但我在本地环境中遇到错误,但应用程序在线工作(使用Heroku)。我相信memcache在我的本地环境中引起了问题。这是我到目前为止所做的:

  1. 在Heroku
  2. 中为我的应用添加了memcache插件
  3. 在我的机器上安装Homebrew
  4. 使用带有brew install memcached
  5. 的Homebrew安装内存缓存

    然后我重新启动了我的应用程序并使用memcached -vv运行了memcache进程。

    当我访问该应用程序时,它工作正常。然后我会创建一个记录。这也很好。然后在页面重新加载 - 当从缓存中提取记录时,整个应用程序系统地失败。以下是我收到的错误(虽然我不确定它有多大帮助)

    You have a nil object when you didn't expect it!
    You might have expected an instance of Array.
    The error occurred while evaluating nil.empty?
    

    错误仅指向使用memcache的代码。简单的用户操作(即从公司购买书籍)会触发错误,一旦发生错误,整个应用程序就会被破坏(意味着任何路径都会导致相同的错误)。好像它只是没有存储/取出项目,这让我认为应用程序根本没有打到memcache ...我是否有可能安装一些东西 - 即使这在生产环境中正常工作另一个开发者的机器?

    我正在寻找有关memcache故障排除的任何指导。更具体地说,有没有人遇到过关于memcache的本地与生产环境的问题?有什么建议?我已经考虑过在Heroku上从应用程序中删除memcache,然后在我的计算机上卸载它然后重做所有内容。

    我知道我在这里相当模糊,但我不确定发布哪些代码会有所帮助。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

经过多次挫折后,我开始回顾我在本地环境中安装和实施memcache的步骤。它是如何在线工作和我朋友的环境而不是我的工作是没有意义的。最后我运行了bundle install然后重新启动了应用程序并运行了一个新的memcached进程并修复了所有问题。我仍然有点困惑,但我想我的Gemfile只是没有更新(尽管我可以发誓)。

答案 1 :(得分:0)

我在环境中使用memached没有任何问题,虽然我不使用Herouku。要访问memcached,我已经从https://github.com/mperham/dalli

安装了Dalli gem

使用它很简单。 在文件environment.rb中添加:

DC = Dalli::Client.new('localhost:11211')

在我使用的应用程序中

DC.get(key)
DC.delete(key)
DC.set(key,value)

答案 2 :(得分:0)

首先,您需要测试您设置的按键是否实际设置。您可以使用Memcached via a Telnet interface对此进行测试。