[Ruby On Rails] Ursachen und Abhilfemaßnahmen für ActionView :: Template :: Error (ActiveStorage :: InvariableError) (Hypothese / Überprüfung)

Es ist ein Memorandum. Wir haben die Ursache von ActionView :: Template :: Error (ActiveStorage :: InvariableError) und den Umgang damit angenommen und überprüft.

Fehler Hintergrund / Hintergrund

Ich habe beschlossen, den Betrieb der bereitgestellten Anwendung zu überprüfen. Dieses Mal möchte ich einfach manuell überprüfen, ob das Bild hochgeladen wurde. Daher habe ich beschlossen, den Vorgang zu überprüfen, ohne einen Komponententest oder Integrationstest durchzuführen.

Dieses Mal bat ich meine Freunde um mich herum, bei der Funktionsprüfung mitzuarbeiten. In Bezug auf die Zusammenarbeit habe ich darum gebeten, eine Datei an ein Formular anzuhängen, in dem Bilder veröffentlicht werden können, und zu prüfen, ob die veröffentlichte Datei in der Ansicht angezeigt werden kann.

Fehlerinhalt

Ich habe von einem Freund eines Mitarbeiters den Bericht erhalten, dass ich eine Bilddatei angehängt habe, und habe daher den Detailbildschirm der bereitgestellten App überprüft. Dann wurde "Es tut uns leid, aber etwas ist schief gelaufen" angezeigt.

Zuerst habe ich das Protokoll und seine Fehlerdetails im Terminal überprüft. (Diesmal Heroku)

% heroku logs --tail

(Unterlassung)

ActionView::Template::Error (ActiveStorage::InvariableError)
    34: <div>
    35:Bild
    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

Was ich nachgeschlagen habe

Ich habe den Artikel über den Fehlerinhalt überprüft. Der Schlüssel zur Behebung dieses Fehlers war "Verwenden Sie die Variable? Methode, um zu unterscheiden, ob ein Blob eine Variable ist". Die hier erwähnte Variable ist das angehängte Bild, aber es stellte sich heraus, dass der Schlüssel ist, ob die richtige Variable (Bild) angegeben ist.

"Was ist variabel? An erster Stelle?"

Als ich es im Internet nachgeschlagen habe, wurde es bei der Verwendung von Variablen verwendet, um das Aufrufen des Bildes nur dann zu ermöglichen, wenn es True war. Durch Kombinieren mit der ActiveStorage.variable_content_types-Methode stellte ich dann fest, dass das Anhängen von Bildern nur mit der angegebenen Erweiterung begrenzt wird.

Hypothese

Erstens ist die von einem Freund gepostete Datei keine Bilddatei oder ein Bild mit einer von active_storage unterstützten Erweiterung. Ich habe die Hypothese aufgestellt.

Was ging

Ich habe einen Freund nach der Möglichkeit gefragt, etwas anderes als ein Bild zu posten. Dann lautete die Antwort "Ich habe es angehängt, ohne mit Tekito über die Dateien zu sprechen, in denen Bilder und Dateien mit anderen Erweiterungen gemischt sind". Mit anderen Worten, es ist sehr wahrscheinlich, dass etwas anderes als das Bild angehängt ist.

Basierend auf dem, was ich von meinen Freunden und meiner eigenen Hypothese gehört habe, habe ich versucht zu prüfen, ob ich eine Datei mit der falschen Erweiterung anhängen und speichern kann und ob die Detailseite zu einem Fehler führen würde.

Ergebnis

Wie bei meinen Freunden konnte ich Daten mit einer Erweiterung speichern, die nichts damit zu tun hatte. Als ich dann zur Detailseite wechselte, wurde auch die Meldung "Es tut uns leid, aber etwas ist schief gelaufen" angezeigt.

Mit anderen Worten, es stellte sich heraus, dass "eine Datei mit der richtigen Erweiterung nicht gesendet wurde".

Verwenden Sie in Zukunft die ActiveStorage.variable_content_types-Methode usw., damit das Speichern anderer als einer bestimmten Erweiterung abgelehnt wird, damit ein Fehler wie dieser nicht auftritt.

Ergänzung

Während des Testvorgangs war das Hochladen manchmal nicht möglich, wenn die Bilderweiterung .heic war (in einigen Fällen ist die Ursache unbekannt). Wie im zweiten Artikel des Referenzartikels beschrieben, scheint es, dass derzeit keine Dateien mit der Erweiterung .heic unterstützt werden. Daher ist es möglicherweise besser, dies zu vermeiden und nur gut oder heic zu schreiben. Ich weiß es nicht.

Das Lesen von Artikeln auf Englisch ist ziemlich wichtig

Referenzartikel

https://edgeapi.rubyonrails.org/classes/ActiveStorage/InvariableError.html https://stackoverflow.com/questions/60686249/activestorageinvariableerror-in-homeindex https://qiita.com/xusaku_/items/36a61e35b6cd863bbf9d

Recommended Posts

[Ruby On Rails] Ursachen und Abhilfemaßnahmen für ActionView :: Template :: Error (ActiveStorage :: InvariableError) (Hypothese / Überprüfung)
Erklärung von Ruby on Rails für Anfänger ⑤ ~ Datenbank bearbeiten und löschen ~
[Ruby / Rails] Mechanismus zum erneuten Versuch eines Thread-Fehlers
Erklärung von Ruby auf Schienen für Anfänger ①
[Ruby on Rails] Hinzufügen und Löschen von Tags und Anzeigen von (Erfolgs- / Fehler-) Meldungen mit Ajax.
Validierungseinstellungen für die Ruby on Rails-Anmeldefunktion
[Anfänger-Verfahrenshandbuch 2] Ruby on Rails: Erstellen einer Rails-Vorlage
[Ruby on Rails] Select2-Einführungsnotiz für Webpacker
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Rails] Verfahren zum Verknüpfen von Datenbanken mit Ruby On Rails
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
Erklärung von Ruby on Rails für Anfänger ④ ~ Informationen zu Benennungsregeln und zur Verwendung von form_Tag ~
Erklärung von Ruby auf Schienen für Anfänger ⑥ ~ Erstellung der Validierung ~
Erklärung von Ruby on Rails für Anfänger ② ~ Links erstellen ~
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
Ursachen und Abhilfemaßnahmen für die Ausnahme "ServletException: Fehler beim Instanziieren der Servlet-Klasse" beim Bereitstellen von Java-Apps