2012-10-04 6 views
4

내 node.js express 앱에서 세션에 redis를 사용하고 있습니다. 그것은 내 dev에 상자에서 잘 작동하지만, 생산, redis 세션 저장되지 않는 것 같습니다.서버에서 redis 세션이 작동하지 않습니다.

내가 로그인 할 수 없다는 오류가 표시되지 않습니다.

Redis가 동일한 구성으로 실행 중입니다. 그러나 redis-cli을 실행하고 'select 1'(db) 및 KEYS '*'을 입력하면 아무 것도 얻지 못합니다.

var RedisStore = require('connect-redis')(express); 

    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'sauce' 
    })); 

cfg.redis.host는 로컬 호스트 내가이 redis-cli monitor

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

일부 코드 예 (바람직하게는 최소한의 테스트 케이스)를 보여준다. – ebohlman

+0

코드로 업데이트되었습니다. – chovy

+0

"cfg"가 dev/pros env에서 다른가요? – mathieug

답변

1

몇 가지 제안을 실행할 때 cfg.redis.db 이것은 내가 오류 1

입니다. Redis는 프로덕션 환경에서 동일한 포트와 암호를 사용합니까? Heroku와 같은 서비스에서 SSL을 사용하는 경우 Express가 이전 SSL 종료 이후에 도착한 쿠키를 처리하도록하려면 proxy : true를 설정해야합니다.

.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 파일을 필요 :

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; 
관련 문제