web-dev-qa-db-fra.com

NameError (constante non initialisée Paperclip :: Storage :: S3 :: AWS):

J'essaie d'incorporer des images dans mon application Web et je continue à rencontrer cette erreur après avoir supprimé plusieurs fonctionnalités. Cela se résumait à mon contrôleur d’application "créer" et je ne suis pas tout à fait sûr d’où aller.

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
90
EggSix

Modifiez le aws-sdk de votre Gemfile pour installer une version antérieure à 2.0:

gem 'aws-sdk', '< 2.0'

Ce problème a été introduit avec la nouvelle version de aws-sdk (2.0+). Vous pouvez en lire plus ici: http://Ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2

178
TopaZ

Il existe une solution officielle Utilisez Paperclip depuis cette branche: il fonctionne avec les versions d'aws-sdk supérieures à 2

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

ajoutez simplement: le paramètre s3_region à votre Paperclip s3 config

travaille pour moi

18
Vitali Mogilevsky

Je l'ai fait fonctionner en accédant à mon dossier de pierres précieuses et en modifiant les pierres précieuses à:

  • gem "trombone"
  • gem "aws-sdk"

Les déclarations de version peuvent être supprimées.

Pour éviter d'avoir un gem.lock error, courir bundle update au lieu de bundle install, sinon seules les gemmes seront mises à jour.

Maintenant le heroku logs -t La commande peut être utilisée pour surveiller le serveur heroku pour télécharger des images.

J'ai initialement reçu une nouvelle erreur, Access Denied Error pour le serveur AWS.

Pour résoudre ce problème, j'ai trouvé le Active Access Key ID avec la dernière date sur le site Web Amazon et a utilisé les commandes heroku pour saisir la dernière Access key ID et Secret access key.

Cela m'a permis de voir mon image sur heroku.

J'avais fait tant de Access key ID et Secret access keys _ essayant de résoudre le problème, mais trouva que le vrai problème était les pierres précieuses.

Conseil: enregistrez toutes vos informations de clé d'accès dans OneNote, le Bloc-notes, etc. Ainsi, vous pourrez les retourner et les vérifier.

4
RichiRich

Un trombone est utilisé pour utiliser AWS-SDK v1 dans les versions 4.3 et suivantes. Ils essaient d'inclure le AWS-SDK v2

document officiel de mise à niveau 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`.

en raison d'une incomparabilité en amont (lisez ceci https://github.com/thoughtbot/Paperclip/issues/2021 ) ceci est fusionné mais n'a pas encore été officiellement publié, mais devrait être publié dans Paperclip v 5.0.0

Donc, comme Vitali Mogilevsky mentionné, vous devez utiliser ceci pour le moment:

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

Lorsque Paperclip 5.0 est publié, AWS-SDK v2 doit être inclus.

3
equivalent8