#node.js #redis #wsl-2 #ioredis
Вопрос:
Я запускаю свою redis-server
сборку redis
в своем дистрибутиве Ubuntu wsl2. Но, к сожалению, я не могу подключиться к нему с помощью ioredis
пакета. Вот мой код (это тот же код, который ioredis
был предоставлен):-
const Redis = require("ioredis");
const redis = new Redis({
port: 6379,
host: '127.0.0.1'
});
redis.set("foo", "bar");
redis.get("foo", function (err, result) {
if (err) {
console.error(err);
} else {
console.log(result); // Promise resolves to "bar"
}
});
Каждый раз, когда я получаю следующую ошибку
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1146:16)
Я могу подключиться к redis-server
использованию redis-client
с моего терминала wsl2, но не с помощью моего кода. Я не изменил конфигурацию Redis по умолчанию, поэтому я не уверен, откуда это взялось. Любая зацепка была бы действительно полезна. Спасибо.
Ответ №1:
После нескольких часов опробования различных решений я смог устранить проблему. Поскольку redis-server
на wsl2 работал в отдельной сети, доступ к нему через 127.0.0.1
не работал. Мне нужно было знать IP-адрес моего экземпляра wsl2 и передать правильные сведения о подключении в конструктор ioredis.
- Введите
sudo apt install net-tools
свой терминал wsl2 - Введите
ifconfig
, чтобы получить IP-адрес. Это должно быть вeth0
inet
разделе. - Скопируйте и вставьте IP-адрес при создании экземпляра ioredis
const redis = new Redis({
port: 6379,
host: '<your-wsl2-ip-here>'
});
- Введите
redis-cli
, а затем выключите защищенный режим с помощьюCONFIG SET protected-mode no
.
Надеюсь, это помогло.
Ответ №2:
Другим способом решения вышеуказанной проблемы может быть загрузка конфигурационного файла по умолчанию redis.conf
, расположенного на один уровень выше redis-server
исполняемого файла, который имеет необходимую конфигурацию, чтобы разрешить внешний трафик в процесс wsl2.
./redis-server ../redis.conf