kamikenbo
@kamikenbo (健太 神尾)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ActionView::Template::Error (ActiveStorage::InvariableError)

解決したいこと

ここに解決したい内容を記載してください。
コミュニケーションアプリを作成中です。
デプロイ中にエラーが発生してしまったので解決方法を教えていただきたいです。

発生している問題・エラー

```ActionView::Template::Error (ActiveStorage::InvariableError)

該当するソースコード

ActionView::Template::Error (ActiveStorage::InvariableError):
2021-04-18T13:55:18.712175+00:00 app[web.1]: [0de22c32-e2b1-4bec-a14f-b91b83aaf565]     4:             <%="投稿日:"+ time_ago_in_words(tweet.created_at) + "前"%>
2021-04-18T13:55:18.712176+00:00 app[web.1]: [0de22c32-e2b1-4bec-a14f-b91b83aaf565]     5:           </time>
2021-04-18T13:55:18.712176+00:00 app[web.1]: [0de22c32-e2b1-4bec-a14f-b91b83aaf565]     6:    <div class='tweet-img-content'>
2021-04-18T13:55:18.712177+00:00 app[web.1]: [0de22c32-e2b1-4bec-a14f-b91b83aaf565]     7:        <%= image_tag tweet.image.variant(resize: '400x400'), class: 'tweet-image' if tweet.image.attached? %>
2021-04-18T13:55:18.712179+00:00 app[web.1]: [0de22c32-e2b1-4bec-a14f-b91b83aaf565]     8:       <% if tweet.video.attached? %> <video src="<%= rails_blob_path(tweet.video)%>" type="video/mp4" controls class="tweet-video" ></video>

tweet.rbの現在のvalidateのコード

validate :image_content_type, if: :was_attached?
  def image_content_type
    extension = ['image/png', 'image/jpg', 'image/jpeg', 'image/GIF','image/BMP']
    errors.add(:image, "の拡張子が間違っています") unless image.content_type.in?(extension)
  end

  validate :video_content_type, if: :has_attached?
  def video_content_type
    extension = ['video/mp4']
    errors.add(:video, "の拡張子が間違っています") unless video.content_type.in?(extension)
  end
 def was_attached?
    self.image.attached?
  end

  def has_attached?
    self.video.attached?
  end

自分で試したこと

ネットで参考となる記事を探しました。下記のサイトが対象になるかと思うのですが、
ActiveStorage.variable_content_typesメソッド等を使う表現でどこにどのように記載するかが現状の自分では全く検討がつきませんでした。
別の拡張子で投稿された際のバリデーションをどのように記載するかが肝になるとはわかるのですが...
教えていただきたいです。
宜しくお願いいたします。
https://qiita.com/NedzumiNeko/items/5a40dfaff3502a9a375f

0

1Answer

ActiveStorage::InvariableError が起きているので、画像を変換できなかったというものです。

<%= image_tag tweet.image.variant(resize: '400x400'), class: 'tweet-image' if tweet.image.attached? %>

上記ソースの variant が動かなかったということですね。

画像の変換ができない理由はいくつかありますが、主なものは以下の3つでしょうか

  • ImageMagick がインストールされていない
  • MiniMagick Gem がインストールされていない(定義すれば Vips でもいいみたいですね)
  • 添付されているものが画像ではないなど、変換不能な場合( variable? が偽を返す場合)
0Like

Comments

  1. @kamikenbo

    Questioner

    @yoshi389111
    ご連絡ありがとうございます。
    本番環境うまくいきました!
    最初にデプロイがうまくいった際に、本番環境でテストをする際に添付する画像の拡張子を指定以外のものを貼り付けてWe're sorry, but something went wrong.のエラーを出したことを思い出しました。もしかしたらこれがずっと悪さをしているのかと思い、herokuのデータベースを一度リセットしてみました。
    heroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:create db:migrate
    丸1日費やしてしまいましたが、解決できてよかったです!
    ありがとうございました!

Your answer might help someone💌