web-dev-qa-db-fra.com

Erreur de blob avec Active Storage Rails 5.2

Je viens de mettre à jour un 5.1.4. app à 5.2 et essaie d’échanger Paperclip pour ActiveStorage. Au moment d'essayer de mettre à jour un enregistrement existant avec une image, j'obtiens le message d'erreur suivant:

Impossible d'auto-charger la constante ActiveStorage :: Blob :: Analyzable, attendu /Users/Simon/.rvm/gems/Ruby-2.4.0/gems/activestorage-5.2.0/app/models/active_storage/blob/analyzable.rb pour le définir

Dans mon modèle:

has_one_attached :pic

Dans mon contrôleur:

...

  def update
    respond_to do |format|
      if @gin.update(gin_params)
        format.html { redirect_to @gin, notice: 'Gin was successfully updated.' }
        format.json { render :show, status: :ok, location: @gin }
      else
        format.html { render :edit }
        format.json { render json: @gin.errors, status: :unprocessable_entity }
      end
    end
  end

...

 def gin_params   params.require(:gin).permit(:name, :text, :snippet,
 :pic, :slug, :abv, distillery_attributes: [:id, :name], botanical_ids:
 []) end

Dans storage.yml:

   Amazon:
    service: S3
    access_key_id: <%= Rails.application.credentials.Dig(:aws, :access_key_id) %>
    secret_access_key: <%= Rails.application.credentials.Dig(:aws, :secret_access_key) %>
    region: xx-xxxx-x
    bucket: xxxxxxx

Je règle les clés d'accès via Rails credentials:edit

En développement.rb:

 config.active_storage.service = :Amazon

Dans mes vues:

<%= image_tag @gin.pic, class: "border shadow-lg" %>

J'ai lu http://edgeapi.rubyonrails.org/classes/ActiveStorage/Blob/Analyzable.html mais cela n'a pas beaucoup de sens pour moi.

L'erreur m'a fait chercher le fichier à app/models/active_storage/blob/analyzable.rb mais je ne le vois pas dans mon application?

Qu'est-ce que j'ai manqué?

4
Simon Cooper

Résolu

Alors que j'avais déjà gem 'aws-sdk-s3', '~>1' je n'avais pas require: false

1
Simon Cooper

J'ai exactement la même erreur. Pour moi, c'était parce qu'il manquait les informations d'identification pour AWS S3 (il manquait dans credentials.yml.enc )

2
nuaky

J'avais cette exception mais la cause de mes problèmes était que le stockage actif ne parvenait pas à charger ses configurations de storage.yml:

Le chargement du fichier dans une console Rails affiche l'exception (alors que Rails l'avale lors du chargement de la configuration de stockage active):

YAML.load(ERB.new(File.read("#{Rails.root}/config/storage.yml")).result)
NoMethodError: undefined method `[]' for nil:NilClass

J'ai eu un commentaire avec une interpolation ERB non valide. Résoudre ce problème corrigé mon problème.

0
eprothro

Lancer Rails active_storage:install et Rails db:migrate

Ajouter cette gemme gem 'aws-sdk-s3', '~>1' et bundle

Supprimer votre credential.yml.enc et votre master.key s'il existe

Lancer EDITOR=vim Rails credentials:edit et met vos informations d'identification

Et normalement Rails s cela devrait fonctionner

0
Clement C