2012-04-02 23 views
1

私はサインアップ時に各ユーザーのブックマークレットファイルを作成するRailsアプリケーションを構築しています。私はそのファイルをリモートサーバに保存したいので、"Rails upload file to ftp server"に基づいてRubyのNet :: FTPを試しています。Net :: FTPを使用して別のサーバーにファイルをコピーするにはどうすればよいですか?

私はこのコードを試してみました:

require 'net/ftp' 

    FileUtils.cp('public/ext/files/script.js', 'public/ext/bookmarklets/'+resource.authentication_token) 
    file = File.open('public/ext/bookmarklets/'+resource.authentication_token, 'a') {|f| f.puts("cb_bookmarklet.init('"+resource.username+"', '"+resource.authentication_token+"', '"+resource.id.to_s+"');$('<link>', {href: '//***.com/bookmarklet/cb.css',rel: 'stylesheet',type: 'text/css'}).appendTo('head');});"); return f } 
    ftp = Net::FTP.new('www.***.com') 
    ftp.passive = true 
    ftp.login(user = '***', psswd = '***') 
    ftp.storbinary("STOR " + file.original_filename, StringIO.new(file.read), Net::FTP::DEFAULT_BLOCKSIZE) 
    ftp.quit() 

をしかし、私はファイル変数がnilであると、エラーを取得しています。私はここでいくつかのことを間違っているかもしれない。私はRubyとRailsの新機能ですから、どんな助けも歓迎します。

答えて

1

File.openのブロック形式では、ファイルハンドルは返されません(その場合でも、その時点で閉じられます)。おそらく、大まかにコードを変更します。また

require '…' 
FileUtils.cp … 
File.open('…','a') do |file| 
    ftp = … 
    ftp.storbinary("STOR #{file.original_filename}", StringIO.new(file.read)) 
    ftp.quit 
end 

:それをやった

require '…' 
FileUtils.cp … 
filename = '…' 
contents = IO.read(filename) 
ftp = … 
ftp.storbinary("STOR #{filename}", StringIO.new(contents)) 
ftp.quit 
+0

を。本当にありがとう! –

+0

@BonChampionあなたが本当に望むのは、次のとおりです: 'File.open( '...'、 'a'){| file | ... ftp.storbinary( "STOR ..."、ファイル)...} ';具体的には、 'StringIO'オブジェクトがまったく必要であることは確かですか? – Phrogz

関連する問題