Как мне скопировать файл на отдельный сервер, используя Net :: FTP? - PullRequest
1 голос
/ 03 апреля 2012

Я создаю приложение Rails, которое создает файл букмарклета для каждого пользователя при регистрации.Я хотел бы сохранить этот файл на удаленном сервере, поэтому я пробую Ruby Net :: FTP, основанный на «Rails загрузить файл на 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()

Но я получаю сообщение об ошибке, что файловая переменная равна нулю.Я могу сделать несколько вещей неправильно здесь.Я довольно новичок в Ruby и Rails, поэтому любая помощь приветствуется.

1 Ответ

1 голос
/ 03 апреля 2012

Форма блока 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...