dbelyaeff / cogear.js

Modern static websites generator (Node.JS/Webpack)

Home Page:https://cogearjs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Проблема деплоя sftp

WarL0ckNet opened this issue · comments

Извини напишу по русски :)
Просто ради теста пробую задеплоить внутри локалки на сервер Ubuntu с Windows.
deploy.yaml

sftp:
type: sftp
host: 192.168.1.2
user: user
password: pwd
path: /home/sites/hexo/

выходит ошибка:

√ Current working dir: c:\Temp\cogear
√ Theme default.
√ Presets found: sftp
i No preset is chosen.
i Starting sftp preset by default:

  • Deploying:Authenticating with password.
    / Deploying:/home/sites/hexo/ undefined
    path.js:39
    throw new ERR_INVALID_ARG_TYPE('path', 'string', path);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Re
ceived type undefined
at assertPath (path.js:39:11)
at Object.join (path.js:432:7)
at C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\node-sftp-deploy\index.js:79:62
at iterate (C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\node-sftp-deploy\node_modules\async\lib\async.js:146:13)
at Object.async.eachSeries (C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\node-sftp-deploy\node_modules\async\lib\async.js:162:9)
at C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\node-sftp-deploy\index.js:70:23
at C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\node-sftp-deploy\index.js:189:21
at SFTPStream.onReady (C:\Users\Alex\AppData\Roaming\npm\node_modules\cogear\node_modules\ssh2\lib\client.js:756:9)
at Object.onceWrapper (events.js:273:13)

Привет!

Собственно, это даже не бага, а неправильный настрой конфига.

Видишь, что пакет sftp говорит? Папки на сервере не существует.

Следовательно, надо указывать существующий путь.

То есть он попытался зайти на сервер, зашёл, но при проверки пути получил вместо строки обратно undefined.

warlock@warl0ck:/home/sites$ ls -la /home/sites/hexo
итого 8
drwxrwxrwx 2 warlock warlock 4096 окт 16 19:35 .
drwxr-xr-x 23 www-data www-data 4096 окт 16 20:59 ..
уже и chown на юзера нужного сделал и chmod 0777 не помогает.
И кстати папка осталась после успешного деплоя туда hexo, потом очистил.

Попробуйте path в кавычки взять в .yaml-файле.

Посмотрите в код модуля деплоя:
https://github.com/codemotion/cogear.js/blob/master/lib/plugins/deploy.js

строки 103-114:

const sftp = require('node-sftp-deploy');
      sftp({
        'host': options.host,
        'port': 22,
        'user': options.user,
        'pass': options.password,
        'remotePath': options.path,
        'sourcePath': cogear.options.output
      }

Там, как бы не очень много место для манёвра.

Я тестировал с выделенным сервером на Ubuntu, никаких проблем не было.

Протестировал с MacOS на Ubuntu:

Starting production preset by default…
⠙ Deploying…Authenticating with password.
⠇ Deploying…sftp2: 110 files uploaded successfully
✔ Deployed in 26.5s.

Попробовал повторить на винде — поймал тот же баг, что и Вы.

Похоже, что модуль sftp не дружит с виндовыми файловыми путями.

P.S. Проинспектировал код пакета node-sftp-deploy.

Действительно, он с Виндой не дружит. Внутри него идёт специфичная обработка unix-путей. Поэтому и валится.

Поможете найти подходящий пакет, который дружи с файловой системой Windows?

Тогда я его без проблем заменю в ядре.

Спасибо. Подумаю, как лучше. М.б.форкну его с исправлениями.

Всё, я понял. Это у них в npm старый код лежит, а в репозитории уже исправленный. Что ж, будем тогда из Git тягать.

может сделать предобработку для виндовых путей перед вызовом?
у тебя все равно в package.json прописан модуль а npm install берет из npm репы.

Теперь не из npm, а c git:

"node-sftp-deploy": "https://github.com/weixin/node-sftp-deploy.git",

Предвыборка не поможет, потому что там в цикле при обходе файлов обрабатываются пути.