Estoy tratando de incorporar imágenes en mi aplicación web y sigo encontrando este error después de eliminar algunas funciones. Todo se redujo a mi controlador de aplicación 'crear' y no estoy del todo seguro de a dónde debo ir desde aquí.

2015-02-06T20:30:12.292187+00:00 app[web.1]:    (1.9ms)  ROLLBACK
2015-02-06T20:30:12.296299+00:00 app[web.1]: NameError (uninitialized constant Paperclip::Storage::S3::AWS):
2015-02-06T20:30:12.296301+00:00 app[web.1]:   app/controllers/articles_controller.rb:24:in `create'
2015-02-06T20:45:14.691084+00:00 app[web.1]: [paperclip] saving /articles/images/000/000/013/original/git.jpeg
2015-02-06T20:45:14.698744+00:00 app[web.1]: Completed 500 Internal Server Error in 584ms
2015-02-06T20:45:14.700871+00:00 heroku[router]: at=info method=POST path="/articles" host=preston.herokuapp.com request_id=d9d02257-3616-4686-bce5-3d912cd528c2 fwd="76.22.102.38" dyno=web.1 connect=1ms service=698ms status=500 bytes=1754

Articles_controller.rb

class ArticlesController < ApplicationController
http_basic_authenticate_with name: "name", password: "password", except: [:index, :show]

    def index
        @articles = Article.all.order("created_at DESC")
    end

    def show
        @article = Article.find(params[:id])
    end

    def new
        @article = Article.new
    end 

    def edit
        @article = Article.find(params[:id])

    end

    def create
        @article = Article.new(article_params)

        if @article.save
          redirect_to @article
        else
            render 'new'
        end  
    end

    def update
        @article = Article.find(params[:id])

        if @article.update(article_params)
            redirect_to @article
        else
            render 'edit'
        end
    end

    def destroy
        @article = Article.find(params[:id])
        @article.destroy

        redirect_to articles_path
    end

    private

    def article_params
        params.require(:article).permit(:title, :text, :image)
    end
end

Gemfile

source 'https://rubygems.org'
ruby '2.0.0'

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'bootstrap-sass', '~> 3.3.3' 
gem 'autoprefixer-rails'
gem 'paperclip', '~> 4.2.1'
gem 'aws-sdk', '~> 2.0.22'

group :development, :test do
 gem 'byebug'
 gem 'web-console', '~> 2.0'
 gem 'spring'
 gem 'sqlite3'
end

group :production do
    gem 'pg'
    gem 'rails_12factor'
end

group :doc do
    gem 'sdoc', '~> 0.4.0', require: false
end
91
EggSix 6 feb. 2015 a las 23:38

4 respuestas

La mejor respuesta

Modifique el aws-sdk de su Gemfile para instalar una versión anterior a la 2.0:

gem 'aws-sdk', '< 2.0'

Este problema se introdujo con la nueva versión de aws-sdk (2.0+). Puede leer más aquí: http: // ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2

179
nobody 4 mar. 2015 a las 12:32

Paperclip se utiliza para utilizar AWS-SDK v1 en las versiones 4.3 y siguientes. Están intentando incluir AWS-SDK v2

Documento de actualización oficial https://github.com/thoughtbot/paperclip/blob/master/UPGRADING

##################################################
#  NOTE FOR UPGRADING FROM 4.3.0 OR EARLIER       #
##################################################

Paperclip is now compatible with aws-sdk >= 2.0.0.

If you are using S3 storage, aws-sdk >= 2.0.0 requires you to make a few small
changes:

* You must set the `s3_region`
* If you are explicitly setting permissions anywhere, such as in an initializer,
  note that the format of the permissions changed from using an underscore to
  using a hyphen. For example, `:public_read` needs to be changed to
  `public-read`.

Debido a cierta incomparabilidad hacia atrás (lea este https://github.com/thoughtbot/paperclip/issues/ 2021) esto se fusionó pero aún no se lanzó oficialmente, pero debería publicarse en Paperclip v 5.0.0

Entonces, como se mencionó Vitali Mogilevsky, debes usar esto por ahora:

# Gemfile
# ...
gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

Cuando se lance Paperclip 5.0, se debe incluir AWS-SDK v2

3
Community 23 may. 2017 a las 12:10

Lo hice funcionar navegando a mi carpeta de gemas y cambiando las gemas a:

  • joya "clip"
  • joya "aws-sdk"

Las declaraciones de versión se pueden eliminar.

Para evitar obtener un gem.lock error, ejecute bundle update en lugar de bundle install; de lo contrario, solo se actualizarán las gemas.

Ahora, el comando heroku logs -t se puede usar para monitorear el servidor heroku para cargar imágenes.

Originalmente recibí un nuevo error, Access Denied Error para el servidor AWS.

Para solucionar esto, encontré el Active Access Key ID con la última fecha en el sitio web de Amazon y usé comandos heroku para ingresar los últimos Access key ID y Secret access key.

Esto me permitió ver mi imagen en heroku.

Había hecho tantos Access key ID y Secret access keys tratando de solucionar el problema, pero descubrí que las gemas eran el verdadero problema.

Sugerencia: Guarde toda la información de su clave de acceso en OneNote, Bloc de notas, etc. De esta manera puede regresar y verificarla.

4
WonderWorker 3 ene. 2017 a las 10:59

Hay una solución oficial.Use un clip de esta rama: funciona con versiones de aws-sdk anteriores a 2

gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

Simplemente agregue: parámetro s3_region a la configuración de su clip s3

Funciona para mi

18
Vitali Mogilevsky 21 oct. 2015 a las 14:47