Невозможно загрузить файлы в Amazon S3 с помощью Fog и Carrierwave в Rails - "Сброс соединения по пиру (Errno::ECONNRESET)"
Я надеюсь, что кто-то может определить, где я ошибся - я настроил учетную запись Amazon S3 и ищу возможность загружать документы из моего приложения Rails для хранения в корзине S3. Когда я запускаю свой локальный сервер в облаке 9 и пытаюсь загрузить документ, я получаю следующую ошибку;
Excon:: Error:: Socket в DocumentsController#create Сброс соединения по пиру (Errno::ECONNRESET)
Извлеченный источник (вокруг строки № 22):
20. @user = User.find(params[:user_id])
21. @document = @user.documents.new(document_params)
22. if @document.save
23. flash[:success] = "Document upload successful."
24. redirect_to user_documents_path(@user)
else
Вот драгоценные камни, которые я установил;
gem 'carrierwave', '~> 0.11'
gem 'fog', '~> 1.38'
Вот мой файл attachment_uploader.rb;
# encoding: utf-8
class AttachmentUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
storage :fog
# Provide a default URL as a default if there hasn't been a file uploaded:
# def default_url
# # For Rails 3.1+ asset pipeline compatibility:
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
#
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
# end
# Process files as they are uploaded:
# process :scale => [200, 300]
#
# def scale(width, height)
# # do something
# end
# Create different versions of your uploaded files:
# version :thumb do
# process :resize_to_fit => [50, 50]
# end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(jpg jpeg gif png pdf doc docx tiff bmp txt)
end
Вот мой файл carrierwave.rb;
# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY']
}
config.fog_directory = ENV['S3_BUCKET']
end
if Rails.env.test? || Rails.env.cucumber?
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
end
AttachmentUploader
# use different dirs when testing
CarrierWave::Uploader::Base.descendants.each do |klass|
next if klass.anonymous?
klass.class_eval do
def cache_dir
"#{Rails.root}/spec/fixtures/uploads"
end
def store_dir
"#{Rails.root}/spec/fixtures/uploads/"
end
end
end
end
И, как кажется, ошибка указывает на мой контроллер документов, вот соответствующий код;
class DocumentsController < ApplicationController
# Filter for the all actions if user is not logged in.
before_action :correct_user, only: [:index, :create, :new, :destroy]
# Display a list of all documents for a currently selected patient file
def index
@user = User.find(params[:user_id])
@documents = @user.documents
end
def new
@user = User.find(params[:user_id])
@document = Document.new
end
# Create a new document using passed parameters
def create
@user = User.find(params[:user_id])
@document = @user.documents.new(document_params)
if @document.save
flash[:success] = "Document upload successful."
redirect_to user_documents_path(@user)
else
render "new"
end
end
# Delete a document from the patient record
def destroy
@document = Document.find(params[:id])
FileUtils.rm(@document.attachment.path)
@document.destroy
flash[:success] = "The document has now been deleted from this record."
redirect_to user_documents_path(@user)
end
# Document download action, includes check for logged in user and document
# owner.
def download
@document = Document.find(params[:id])
if is_employee? || current_user?(@document.user)
path = "#{@document.attachment.path}"
send_file path, :x_sendfile => true
else
flash[:danger] = "Access denied."
redirect_to main_menu_path
end
end
# Private methods
private
def document_params
params.require(:document).permit(:title, :attachment, :filetype)
end
def correct_user
@user = User.find(params[:user_id])
unless logged_in? && (current_user?(@user) || is_employee?)
flash[:danger] = "Access denied."
redirect_to main_menu_path
end
end
end
Я создал свое приложение с Rails 4.2.6
Спасибо за внимание, любая помощь очень ценится. Я искал в переполнении стека похожие запросы, относящиеся к этой ошибке, но, похоже, не смог найти что-то конкретное для моей конкретной проблемы, поэтому я надеялся, что кто-то более опытный, чем я, сможет просмотреть это и указать, что я сделали неправильно.
Спасибо!