Невозможно загрузить файлы в 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

Спасибо за внимание, любая помощь очень ценится. Я искал в переполнении стека похожие запросы, относящиеся к этой ошибке, но, похоже, не смог найти что-то конкретное для моей конкретной проблемы, поэтому я надеялся, что кто-то более опытный, чем я, сможет просмотреть это и указать, что я сделали неправильно.

Спасибо!

0 ответов

Другие вопросы по тегам