Rails 3.x загружает файл через rest-client с помощью S3 :: Нет такого файла или ошибка каталога

У меня есть файл изображения, хранящийся на S3. Я хочу загрузить этот файл как данные формы на удаленный сайт.

Линия контроллера:

response = RestClient.post("#{BASE_URL}/processImage?language=#{LANGUAGE}&exportFormat=txt", :upload => { :file => File.new(asset.avatar.url) }) 

assets.avatar.url — это файл в виде скрепки, хранящийся на S3. Это здесь. Это общедоступно.

Но я продолжаю получать Errno::ENOENT (Нет такого файла или каталога) с URL-адресом... это работает!

Я, вероятно, упускаю что-то простое здесь. У кого-нибудь есть идеи?

** РЕДАКТИРОВАТЬ: РЕШЕНО **

Я использовал open-uri, а затем просто использовал open(). Он все еще загружается на сервер, но, по крайней мере, работает. И визуально выглядит проще. знак равно

Вот исправление:

require 'open-uri'
response = RestClient.post("#{BASE_URL}/processImage?language=#{LANGUAGE}&exportFormat=txt", :upload => { :file => open(asset.avatar.url) })  

Open-uri является частью ruby, поэтому вам не нужно устанавливать гем (например, rest-client). Просто добавьте его в свой код.

Я думал, что мне понадобится где-то там файл .read, но похоже он прекрасно работает и без него.


person The One Rob    schedule 18.01.2013    source источник


Ответы (1)


Вам необходимо загрузить файл/содержимое, прежде чем публиковать его с помощью RestClient. File.new принимает в качестве аргумента путь к файлу, а не URL-адрес.

person Pafjo    schedule 18.01.2013
comment
Да, ты прав. Я надеялся на автоматическое решение Rails. =П - person The One Rob; 19.01.2013
comment
Нашел решение (open-uri), не требующее загрузки на сервер. Смотрите мою правку. - person The One Rob; 20.01.2013
comment
Open-uri — это хорошая оболочка для сети/http, которая загружает ваш контент, когда вы вызываете open(url). Таким образом, контент все равно будет загружен на сервер перед отправкой с помощью RestClient. Кстати, я думаю, вам нужно вызвать read, чтобы действительно прочитать содержимое из созданного StringIO-экземпляра. - person Pafjo; 20.01.2013
comment
Что ж, это определенно были образовательные пару дней. Вы совершенно правы. Это показывает, что 1) мне нужно перестать быстро читать документы, когда я ищу ответы, и 2) я должен доверять людям с 1500+ баллами... =) - person The One Rob; 21.01.2013