簡體   English   中英

在nginx后面使用帶有Cherrypy的會話RamSession時出錯

[英]Error using session RamSession with cherrypy behind nginx

我正在使用我自己基於nginx的RamSession的會話運行cherrypy應用程序。 問題在於每個請求的會話ID都會更改。 我相信問題在於每次發出請求時,它都會轉到另一個工作人員,因此保存了會話,但是下一個可用工作人員在下一個請求中無法識別該會話(不幸的是,事情的工作原理有限)。 當我將工人數設置為1時,一切都會按預期進行。 我知道我可能可以使用FileSession或任何類型的基於數據庫的會話處理程序,但只是想知道是否有解決方案。 謝謝

這是我的暴發戶腳本:

description "uwsgi tiny instance"
start on runlevel [12345]
stop on runlevel [06]

exec /home/web/.virtualenvs/myenv/bin/uwsgi --uid web -H /home/web/.virtualenvs/myenv -w myapp.wsgi -p 1 -M -s 127.0.0.1:3031

這是我的會議:

class MySession(sessions.RamSession):
    def clean_up(self):
        """Clean up expired sessions."""
        now = self.now()
        for id, (data, expiration_time) in copyitems(self.cache):
            if expiration_time <= now:
                try:
                    active = Mongo(ActiveSession).find_one('active', self.cache['active'])
                    Mongo(ActiveSession).remove(active)
                except:
                    print "Failed to remove active session object."
                try:
                    del self.cache[id]
                except KeyError:
                    pass
                try:
                    del self.locks[id]
                except KeyError:
                    pass
        # added to remove obsolete lock objects
        for id in list(self.locks):
            if id not in self.cache:
                self.locks.pop(id, None)

和我的配置:

config = {
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.join(current_dir, 'media/public')
    },
    '/fotos': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.join(current_dir, 'media/fotos')
    },
    '/' : {
        'tools.sessions.on': True,
        'tools.sessions.name': 'myapp'
        'tools.sessions.storage_type': 'my',
        'engine.autoreload_on': False
    }
}

您的直覺是正確的:RamSession一次限制為1個進程。 簡單的解決方案是切換到FileSession(如果您的工作人員都可以訪問同一文件系統)或DB會話。 假設您的工人分布很分散,很可能是后者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM