はじめに
※本記事のファイルパスの hoge
は、適宜ユーザ名に読み替えてください。
Visual Studio Code(以下「VSCode」と記します)の拡張機能に「SFTP」というものがあります。
SFTPを使ってサーバ側とクライアント側でファイルの同期ができる拡張機能で、当方ではhokkaidosm.net プリキュアデータの開発用サーバとのファイル同期に使用しています。
発生した事象について
先日オープンしたこちらのページ。
このページに、鑑賞履歴を追加しようとJSONを編集。
いつも通り保存すると、本来であれば開発用サーバに新しいファイルが送信され、開発用サーバで確認することができるのですが…。
[05-29 20:13:51] [error] Error: No such file
at SFTPStream._transform (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js:412:27)
at SFTPStream.Transform._read (internal/streams/transform.js:205:10)
at SFTPStream._read (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js:183:15)
at SFTPStream.Transform._write (internal/streams/transform.js:193:12)
at writeOrBuffer (internal/streams/writable.js:358:12)
at SFTPStream.Writable.write (internal/streams/writable.js:303:10)
at Channel.ondata (internal/streams/readable.js:719:22)
at Channel.emit (events.js:315:20)
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at Channel.Readable.push (internal/streams/readable.js:223:10)
at SSH2Stream.<anonymous> (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2\lib\Channel.js:167:15)
at SSH2Stream.emit (events.js:315:20)
at parsePacket (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:3288:10)
at SSH2Stream._transform (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:694:13)
at SSH2Stream.Transform._read (internal/streams/transform.js:205:10)
at SSH2Stream._read (c:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:253:15)
at SSH2Stream.Transform._write (internal/streams/transform.js:193:12)
at writeOrBuffer (internal/streams/writable.js:358:12)
at SSH2Stream.Writable.write (internal/streams/writable.js:303:10)
at Socket.ondata (internal/streams/readable.js:719:22)
at Socket.emit (events.js:315:20)
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at Socket.Readable.push (internal/streams/readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23) when local ➞ remote c:\Users\hoge\Documents\precure\html_precure\movies\history\data\29_yumenomachi.json
突然ファイルがSFTPサーバにアップできなくなってしまったのです。
思い当たる節は…?
今回更新したファイルですが、SSH経由で確認するとちゃんと所定の場所にありました。
しかも先週、同じ方法でトロプリ1第13話の口癖データの更新に成功しているのです。
あえて言うならば、VSCodeのバージョンアップがあったくらいかな…?
こういうときはIssuesが上がっていないか見てみる
サーバの設定も一切いじっていないので、もしかして同じ事象に遭遇した人がそのことを書いているのかも、と思い、この拡張機能のリポジトリにあるIssuesをチェック。
するとドンピシャのIssueが上がっていました。
そこにはこんなコメントが。
- Do a search inside
~/.vscode/extensions/liximomo.sftp-1.12.9/node_modules/ssh2-streams/lib/sftp.js
foroptions.emitClose = false;
- Add
options.autoDestroy = false;
after both instances.
私はWindowsユーザですのでどのファイルを開けば良いのかわかりません、という方のために上記を日本語化してWindows対応にした手順を記載します。
解決方法 for Windows
-
%USERPROFILE%\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js
ファイルを、何らかのテキストエディタで開きます。
たいていの場合はC:\Users\hoge\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js
というパスになるかと思います。 - 検索コマンドで、
options.emitClose = false;
を検索します。2箇所在ります。 - 検索コマンドで見つかった
options.emitClose = false;
のあとに、(改行を入れるか入れないかはお任せします)options.autoDestroy = false;
と記載します。2箇所とも同じ記載を入れます。 - すでにVSCodeを立ち上げている場合は、それを再起動するか
Ctrl+Shift+P
でコマンドパレットを開き、Developer: Reload Window
を実行します。
終わりに
こうして、鑑賞履歴に今日のデータを追加することができました。
ただ、この拡張機能、リポジトリを見る限り最終更新が2年前なんですよね…。
こんなIssueまで立てられてしまっています。
代わりになる拡張機能ってないですかね?
拡張機能に求めるもの
- ファイルを更新すると、自動的にSFTPで指定フォルダにアップしてくれること。フォルダがなければ作成もしてくれること。
- 公開鍵認証(*.ppk、パスフレーズ付き)が可能なこと。
- SFTPサーバ側のポート番号を指定できること(攻撃防御のため、ポート番号を標準のものとは別の番号にしてあります)。
- アップロードしないファイルやフォルダをその名前で指定できること(
.vscode
とか.git
とかはアップロードしないようにする必要があります)。
-
「トロピカル~ジュ!プリキュア」の略称 ↩