#ruby-on-rails #ruby #wget
#ruby-on-rails #ruby #wget
Вопрос:
В настоящее время я использую системную команду wget для загрузки видео и сохранения на нашем сервере:
system("cd #{RAILS_ROOT}/public/users/familyvideos/thumbs amp;amp; wget -O sxyz1.mp4 #{video.download_url}")
но это говорит:
cd: 1: can't cd to /var/home/web/***.com/public/users/familyvideos/thumbs
У кого-нибудь есть идеи? Также, пожалуйста, предоставьте альтернативный вариант для этого.
Ответ №1:
Гораздо лучшим решением было бы использовать 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
Ответ №2:
Это cd
жалоба программы, и это низкоуровневая операционная система, поэтому наиболее вероятная причина в том, что одна или несколько папок после #{RAILS_ROOT}/public
еще не существуют, или в пути к файлу есть пробел или какой-либо другой символ, вызывающий проблемы. Попробуйте заключить название каталога в кавычки.
`cd "#{RAILS_ROOT}/public/users/familyvideos/thumbs" amp;amp; wget -O sxyz1.mp4 #{video.download_url}`
Что касается лучших способов, wget довольно проверен, поэтому в его использовании нет ничего плохого, поскольку это то, для чего он был разработан. Однако вы могли бы просто указать ему папку и имя файла одновременно, вместо того, чтобы сначала вводить к нему cd’ing.
`wget -O "#{RAILS_ROOT}/public/users/familyvideos/thumbs/sxyz1.mp4" #{video.download_url}`
Обратите внимание, что я также использую метод обратного выполнения вместо system
, поэтому вы не имеете дело с экранированием двойных кавычек. Вы также могли бы использовать %x{wget ...}
.