我们正在使用基于 memcached 的烧杯 session 来进行分布式 Plone/Zope 设置。相同的设置在我们的预生产环境中运行良好,但当我们转移到生产环境时,我们似乎无法让它连接到 11211 上的 memcached。
我在启动 Zope 时在计算机上运行 tcpdump,但它甚至没有尝试连接。
我已经从 Zope 服务器远程登录到 memcached 服务器(与 ZEO 服务器相同)来测试连接,效果很好。
我尝试了两个不同的 Zope 产品服务器,结果是相同的。
我们的旧设置(4.2.5)在另一个产品服务器上运行,当我们启动它时,我们得到了预期的行为,并且它很好地连接到了 memcached。不幸的是,我们还有一个 4.3.2 设置(与 prod 相同)在 pre-prod 中运行,它也运行得很好。我无法识别设置中的任何实质性差异。
所有系统都运行独立的(不受系统/apt控制的)Python 2.7s。
zope.conf 的相关部分
# Beaker Configuration
zope-conf-additional =
<product-config beaker>
cache.type ext:memcached
cache.url ${ips:memcached}
cache.data_dir ${buildout:directory}/var/cache/data
cache.lock_dir ${buildout:directory}/var/cache/lock
cache.regions short, long
cache.short.expire 60
cache.long.expire 3600
session.type ext:memcached
session.url ${ips:memcached}
session.data_dir ${buildout:directory}/var/sessions/data
session.lock_dir ${buildout:directory}/var/sessions/lock
session.key beaker.session
session.secret magicalsecretcornedbeefhash
</product-config>
zcml = 集体烧杯
versions.cfg 中的相关版本:
# Beaker
Beaker = 1.6.4
Products.BeakerSessionDataManager = 1.1
collective.beaker = 1.0b3
python-memcached = 1.47
我已经测试过 ${ips:memcached} 在启动时生成正确的值。 Zope 日志中不会记录任何错误,但不会创建烧杯 session ,也不会尝试连接 memcached。 Memcached 运行良好,但没有生成日志(似乎从来没有)。
关于可能导致此问题的任何想法或建议都会有所帮助。更多背景:
Ubuntu 12.04.4 LTS
Linux 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
垃圾箱/构建:
#!/opt/zope/pythons/python-2.7/bin/python
import sys
sys.path[0:0] = [
'/opt/zope/buildouts/FOO/eggs/distribute-0.6.28-py2.7.egg',
'/opt/zope/buildouts/FOO/eggs/zc.buildout-1.7.1-py2.7.egg',
]
最佳答案
转向生产时,请记住 Products.BeakerSessionDataManager README 中的最后一部分:
3. In the ZMI, delete the ``session_data_manager`` object and add a
``Beaker Session Data Manager``.
关于session - 基于 Memcached 的烧杯 session 未在 Zope 启动时初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22800861/