お疲れ様です。すぺきよです。
今日は仕事中にハマった小ネタです。
なにがあったの?
VSCodeのSFTPでファイルをサーバーにアップロードしながら開発をしていると、ある時突然ファイルのアプロードに失敗するようになりました。
詳細を確認すると、以下のようなメッセージが出力されてアップロードに失敗しているようです。
[09-04 14:57:23] [error] Error: Failure
at 101 (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/SFTP.js:2854:19)
at SFTP.push (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/SFTP.js:278:11)
at CHANNEL_DATA (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/client.js:587:23)
at 94 (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/handlers.misc.js:930:16)
at Protocol.onPayload (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/Protocol.js:2052:10)
at AESGCMDecipherNative.decrypt (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/crypto.js:987:26)
at Protocol.parsePacket [as _parse] (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/Protocol.js:2021:25)
at Protocol.parse (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/Protocol.js:306:16)
at Socket.<anonymous> (***/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/client.js:775:21)
at Socket.emit (node:events:513:28)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
試しにソースコードを見てみましたが、よくわかりませんでした。
原因は既存の同名ファイル
原因はフォルダと同名のファイルがすでにサーバーにあったことです。
サーバー上に「/example」というファイルがすでに存在している状態で、「/example/file.js」というファイルをアップロードしようとすると、このエラーが出てファイルアップロードに失敗します。
修正方法
サーバー上にすでに存在しているフォルダと同名のファイルを削除するか、ファイルの名前を変更しましょう。
もし、ファイルが必要であるならば、VSCode上のフォルダ名の方を変更しましょう。
どうしてこんなことが起こったか
VSCode上でフォルダを新規に作成するときに、誤ってファイルを新規作成してしまったためです。
その後間違いに気づきVSCode上で、間違えて作成してしまったファイルを削除し、フォルダを作り直して作業を続けていたのですが、サーバー上のファイルは削除されなかったため、このようなエラーが出るようになりました。
たぶん、サーバー上に新しいフォルダを作ろうとして、名前が重複していたために作成に失敗し、このエラーになったのでしょう。
再現方法
再現方法は以下の通りです。
- VSCode上で任意のフォルダに「example」というファイルを作成して、サーバーにアップロード
- VSCode上で「example」というフォルダを作り直し、フォルダ内に「file.js」というファイルを作成して、サーバーにアップロード
この2.の段階でエラーが出てアップロードに失敗します。
まとめ
今回はVSCodeのSFTPプラグインでアップロードが失敗するパターンの一つを解説しました。
こんなミスせんやろ、と思われるようなミスでもしてしまうのが人の常。備忘録として記録しておきます。
誰かのお役に立てば幸いです。