Скачать видео с URL в ruby ​​on rails - PullRequest
0 голосов
/ 16 апреля 2011

В настоящее время я использую системную команду wget для загрузки видео и сохранения на нашем сервере:

system("cd #{RAILS_ROOT}/public/users/familyvideos/thumbs && wget -O sxyz1.mp4 #{video.download_url}")

но это говорит:

cd: 1: can't cd to /var/home/web/***.com/public/users/familyvideos/thumbs

У кого-нибудь есть идеи? Также, пожалуйста, предоставьте альтернативную возможность сделать это.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Гораздо лучшим решением было бы использовать для этого open-uri.

http://www.ruby -doc.org / stdlib / libdoc / open-uri / rdoc /

Этот фрагмент должен помочь:

url = video.download_url
new_file_path = "#{Rails.root.to_s}/public/users/familyvideos/thumbs/your_video.mp4"
open(new_file_path, "wb") do |file| 
  file.print open(url).read
end
1 голос
/ 16 апреля 2011

Это жалоба программы cd, и это низкоуровневая операционная система, поэтому наиболее вероятная причина в том, что одна или несколько папок после #{RAILS_ROOT}/public еще не существуют, или есть пробел или какой-то другой символ в пути к файлу, вызывающий проблемы. Попробуйте заключить имя каталога в кавычки.

`cd "#{RAILS_ROOT}/public/users/familyvideos/thumbs" && wget -O sxyz1.mp4 #{video.download_url}`

Что касается лучших способов, то wget довольно испытан и протестирован, так что в его использовании нет ничего плохого, так как это то, для чего он был разработан. Вы можете просто указать ему папку и имя файла одновременно, вместо того, чтобы сначала перейти к нему.

`wget -O "#{RAILS_ROOT}/public/users/familyvideos/thumbs/sxyz1.mp4" #{video.download_url}`

Обратите внимание, что я использую метод выполнения backtick вместо system, поэтому вы не имеете дело с экранированием двойных кавычек. Вы также можете использовать %x{wget ...}.

...