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é?
Résolu
Alors que j'avais déjà gem 'aws-sdk-s3', '~>1'
je n'avais pas require: false
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 )
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.
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