У меня есть процесс выпуска приложения, который нормально работал неделю или две, а теперь случайно перестал работать. Мое приложение npm построено с помощью Heroku, а затем запускается задание выпуска, которое отправляет статические файлы по FTP на другой хост. Для этого я использую библиотеку ftp npm. Это случайно перестало работать с ошибкой тайм-аута:
Error: Timeout while connecting to server
at Timeout._onTimeout (/app/node_modules/ftp/lib/connection.js:304:24)
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)
сценарий выпуска выглядит следующим образом. :
const DIST_PATH = `dist/cineworld-planner`;
const filesList = readdirSync(join(process.cwd(), DIST_PATH));
const client = new Client();
function pushFiles() {
const putFile = bindNodeCallback(client.put.bind(client));
from(filesList).pipe(
mergeMap(fileName => {
const localPath = join(process.cwd(), DIST_PATH, fileName);
console.log(`Putting path ${localPath} to remote ${fileName}`);
return putFile(localPath, fileName);
}, 1)
).subscribe({
complete: () => client.end()
});
}
client.on('ready', () => {
console.log(`READY`);
pushFiles();
});
client.on('error', (error: any) => {
const code = error.code || 'NO_CODE';
console.log(`ERROR: ${code}`);
console.log(error);
process.exit(1);
});
client.connect({
user: process.env.FTP_USER,
host: process.env.FTP_HOST,
password: process.env.FTP_PASSWORD
});
Я спросил своего хоста, есть ли какие-либо проблемы, но все, что они сказали, это то, что IP-адрес, о котором сообщил мой скрипт, не был заблокирован.
Я протестировал скрипт на своем домашнем ПК, и оттуда он тоже работает нормально.
Это будет серьезной болью, если это перестанет работать. Я действительно не знаю, что еще попробовать.
Любая помощь очень благодарна.
1 ответ
Оказывается, для меня исправление было таким же простым, как увеличение тайм-аута:
const connectOptions: Options = {
user: process.env.FTP_USER,
host: process.env.FTP_HOST,
password: process.env.FTP_PASSWORD,
connTimeout: 60000,
pasvTimeout: 60000,
};
client.connect(connectOptions);
Похожие вопросы
Новые вопросы
heroku
Heroku — это облачная платформа для приложений на основе Ruby, Node.js, Python, Scala, Clojure, Go, PHP и JVM. Он включает стратегии развертывания на основе Git, GitHub и API, большое количество сервисов, предлагаемых в качестве надстроек, и полный API.