我有一個Rails 4應用程序,允許上傳視頻使用jQuery Dropzone插件和回形針寶石。每個上傳的視頻都被編碼爲多種格式,並使用delayed_paperclip,av-transcoder和sidekiq gems在後臺上傳到Amazon S3。回形針Nginx 504網關超時
對於大多數視頻來說,所有的工作都可以正常工作,但是在上傳達到看起來像dropzone插件的進度條末端時,1.1GB的更大尺寸後,它將返回Nginx 504網關超時。
至於服務器宕機,Rails應用程序上的一對夫婦是在負載平衡器服務器的Nginx的+客運運行(這裏使用Nginx的太)。我沒有在負載均衡器的上游段設置超時,則client_max_body_size
設置爲2000M(既對負載均衡和服務器),我試過設置passenger_pool_idle_time
到一個較大的值(600),沒有幫助,我也嘗試設置send_timeout
(600s),沒有任何區別。
注:當進行這些改變,我做了他們兩個服務器的主機文件,以及負載均衡,始終重啓nginx的事後。
我讀過幾個關於this one和this one類似問題的答案,但仍然無法弄清楚,谷歌也沒有太多的幫助。
對於那些不熟悉整個回形針/ delayed_paperclip過程的人來說,一些額外的筆記,文件被上傳到服務器,然後就用戶而言完成操作,在後臺對視頻進行後處理(編碼/上傳到S3)被推送到Redis作爲一項工作,並且Sidekiq在有時間/資源時處理它。
什麼可能導致此問題?我該如何調試並解決它?
UPDATE
感謝謝爾蓋的回答我是能夠解決的問題。由於我僅限於Paperclip的特定版本,因此我無法將其更新到具有修復程序的最新版本,因此我將在此離開我最終做的事情。
在,我用它來處理我已經添加了下面的代碼engine_name.rb
文件覆蓋從回形針在需要固定方法上傳發動機:
Paperclip::AbstractAdapter.class_eval do
def copy_to_tempfile(src)
link_or_copy_file(src.path, destination.path)
destination
end
def link_or_copy_file(src, dest)
Paperclip.log("Trying to link #{src} to #{dest}")
FileUtils.ln(src, dest, force: true) # overwrite existing
@destination.close
@destination.open.binmode
rescue Errno::EXDEV, Errno::EPERM, Errno::ENOENT => e
Paperclip.log("Link failed with #{e.message}; copying link #{src} to #{dest}")
FileUtils.cp(src, dest)
end
end
Paperclip::AttachmentAdapter.class_eval do
def copy_to_tempfile(source)
if source.staged?
link_or_copy_file(source.staged_path(@style), destination.path)
else
source.copy_to_local_file(@style, destination.path)
end
destination
end
end
Paperclip::Storage::Filesystem.class_eval do
def flush_writes #:nodoc:
@queued_for_write.each do |style_name, file|
FileUtils.mkdir_p(File.dirname(path(style_name)))
begin
move_file(file.path, path(style_name))
rescue SystemCallError
File.open(path(style_name), "wb") do |new_file|
while chunk = file.read(16 * 1024)
new_file.write(chunk)
end
end
end
unless @options[:override_file_permissions] == false
resolved_chmod = (@options[:override_file_permissions] &~ 0111) || (0666 &~ File.umask)
FileUtils.chmod(resolved_chmod, path(style_name))
end
file.rewind
end
after_flush_writes # allows attachment to clean up temp files
@queued_for_write = {}
end
private
def move_file(src, dest)
# Support hardlinked files
if File.identical?(src, dest)
File.unlink(src)
else
FileUtils.mv(src, dest)
end
end
end
只是試圖從等式中得出這個結論。什麼是服務器規範?你有沒有嘗試增加服務器資源?我從經驗中得知,回形針即使在圖像上也是一個非常苛刻的過程。我最近添加了視頻功能到我的其中一個應用程序(https://games.directory GIF到MP4),我不得不縮放,因爲在解碼GIF時加載回形針正在生成。我也使用nginx,但使用Rails 5和Puma。 – Vlad
CPU:8 RAM:8GB HDD:50GB – Julien
您是否設法解決該問題?我面對同一個問題,無法找出解決方案。 –