0

文字列をファイルに書き込んで、リモート サーバーにアップロードしようとしています。

Net::SSH.start( "localhost", "root" ) do |ssh|
  Tempfile.open('vh_', Rails.root.join('tmp') ) do |f|
    f.write("FILE_CONTENTS")
    # at this point, i have confirmed that f.path is valid and that file is not empty
    ssh.scp.upload!(f.path, "/remote/path")
    f.close!
  end

  #more ssh commands follow

end

ssh root@localhost の理由は、このファイルが (将来) 他のサーバーにアップロードされるためです。localhost の使用は単にテストのためです。このコードは正常に一時ファイルを (正しい内容で) 作成しますが、アップロード後、リモート ファイルは空 (0 B) になります。

ローカル (dev) マシンでは問題なく動作しますが、サーバーにアップロードするとファイルが空になります。私のローカルは Xubuntu 13.04 を実行しており、サーバーは Ubuntu Server 13.10 です。

4

1 に答える 1

0

元のポスターによると:

アップロードする前に、解決策 (回避策?) が f.rewind であることがわかりました。それが違いを生む理由はわかりません。

于 2017-11-28T15:15:13.393 に答える