2012-10-04 64 views
4

我在我的node.js express應用程序中使用redis進行會話。它在我的開發盒上工作正常,但在生產中,似乎redis會話沒有被保存。redis會話不能在服務器上工作

我沒有看到任何類型的錯誤,除了我無法登錄。

Redis正在運行w /相同的配置。但是當我運行redis-cli並輸入'select 1'(db)和KEYS '*'時,我什麼也沒得到。

​​

cfg.redis.host爲localhost 和cfg.redis.db是1

這是我的錯誤,當我運行redis-cli monitor

Error: Protocol error, got "s" as reply type byte 
+1

顯示一些示例代碼(優選的最小試驗情況)。 – ebohlman

+0

更新了代碼。 – chovy

+0

你的「cfg」在dev/pros env中有所不同嗎? – mathieug

回答

1

幾點建議。你確定Redis在生產中使用相同的端口和密碼嗎?如果您將SSL與Heroku等服務一起使用,則需要設置proxy:true以使Express在早期SSL終止後處理到達的cookie。

.use(express.session({ 
     store: new RedisStore({ 
      port: config.redisPort, 
      host: config.redisHost, 
      db: config.redisDatabase, 
      pass: config.redisPassword}), 
     secret: 'sauce', 
     proxy: true, 
     cookie: { secure: true } 
    })) 

我需要以下config.js文件傳遞上的Redis配置值:

var url = require('url') 
var config = {}; 
var redisUrl; 

if (typeof(process.env.REDISTOGO_URL) != 'undefined') { 
    redisUrl = url.parse(process.env.REDISTOGO_URL); 
} 
else redisUrl = url.parse('redis://:@127.0.0.1:6379/0'); 

config.redisProtocol = redisUrl.protocol.substr(0, redisUrl.protocol.length - 1); // Remove trailing ':' 
config.redisUsername = redisUrl.auth.split(':')[0]; 
config.redisPassword = redisUrl.auth.split(':')[1]; 
config.redisHost = redisUrl.hostname; 
config.redisPort = redisUrl.port; 
config.redisDatabase = redisUrl.path.substring(1); 

console.log('Using Redis store ' + config.redisDatabase) 

module.exports = config; 
相關問題