C'est un mémorandum. Nous avons émis l'hypothèse et vérifié la cause d'ActionView :: Template :: Error (ActiveStorage :: InvariableError) et comment y faire face.
J'ai décidé de vérifier le fonctionnement de l'application déployée. Cette fois, je veux simplement vérifier manuellement si l'image a été téléchargée, j'ai donc décidé de vérifier l'opération sans effectuer de test unitaire ou d'intégration.
Cette fois, j'ai demandé à mes amis autour de moi de coopérer au test de contrôle de fonctionnement. En ce qui concerne la coopération, j'ai demandé de joindre un fichier à un formulaire permettant de publier des images et de vérifier si le fichier publié peut être affiché dans la vue.
J'ai reçu un rapport d'un ami collaborateur selon lequel j'ai joint un fichier image, j'ai donc vérifié l'écran des détails de l'application déployée. Ensuite, "Nous sommes désolés mais une erreur s'est produite" s'est affiché.
Tout d'abord, j'ai vérifié le journal et ses détails d'erreur dans le terminal. (Cette fois heroku)
% heroku logs --tail
(Omission)
ActionView::Template::Error (ActiveStorage::InvariableError)
34: <div>
35:image
36: </div>
37: <%= image_tag @question.image.variant(resize: '200x200'), class: 'question-image' if @question.image.attached? %>
38: <% end %>
39:
40: <%= render 'shared/error_messages', model: @comment %>
app/views/questions/show.html.erb:37
J'ai vérifié l'article sur le contenu de l'erreur. La clé pour résoudre cette erreur était "utiliser la variable? Méthode pour distinguer si un objet blob est une variable". La variable mentionnée ici est l'image jointe, mais il s'est avéré que la clé est de savoir si la bonne variable (image) est donnée.
"Qu'est-ce qui est variable? En premier lieu?"
Ainsi, quand je l'ai recherchée sur le net, elle a été utilisée lors de l'utilisation de variable? Pour permettre d'appeler l'image uniquement lorsqu'elle était True. Ensuite, en le combinant avec la méthode ActiveStorage.variable_content_types, j'ai trouvé qu'elle limite l'attachement d'images avec uniquement l'extension spécifiée.
En premier lieu, le fichier posté par un ami n'est pas un fichier image, ou une image avec une extension prise en charge par active_storage. J'ai fait l'hypothèse.
J'ai interrogé un ami sur la possibilité de publier autre chose qu'une image. Ensuite, la réponse a été "Je l'ai joint sans vérifier avec Tekito à partir des fichiers dans lesquels des images et des fichiers avec d'autres extensions sont mélangés". En d'autres termes, il est fort possible que quelque chose d'autre que l'image soit attaché.
Sur la base de ce que j'ai entendu de mes amis et de ma propre hypothèse, j'ai essayé de voir si je pouvais joindre et enregistrer un fichier avec la mauvaise extension, et si la page de détails entraînait une erreur.
Comme avec mes amis, j'ai pu enregistrer des données avec une extension qui n'avait rien à voir avec cela. Ensuite, lorsque je suis passé à la page de détails, le message "Nous sommes désolés mais une erreur s'est produite" a également été affiché.
En d'autres termes, il s'est avéré qu '"un fichier avec l'extension correcte n'a pas été envoyé".
Dans le futur, utilisez la méthode ActiveStorage.variable_content_types etc. afin que l'enregistrement autre qu'une extension spécifique soit rejeté afin qu'une erreur comme celle-ci ne se produise pas.
Pendant le processus de test, il n'était parfois pas possible de télécharger si l'extension d'image était .heic (dans certains cas, la cause est inconnue). Comme décrit dans le deuxième article de l'article de référence, il semble qu'il ne supporte pas actuellement les fichiers avec l'extension .heic, il peut donc être préférable de l'éviter et d'écrire uniquement good ou heic. Je ne sais pas.
La lecture d'articles en anglais est assez importante
https://edgeapi.rubyonrails.org/classes/ActiveStorage/InvariableError.html https://stackoverflow.com/questions/60686249/activestorageinvariableerror-in-homeindex https://qiita.com/xusaku_/items/36a61e35b6cd863bbf9d
Recommended Posts