tawa19
@tawa19

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!

[Ruby on Rails]本番環境で画像のアップロードができない

解決したいこと

localhost環境では正常にできるのですが、本番環境で画像のアップロードができず解決策を探しています

以下の登録フォームより、ユーザー登録をします。
スクリーンショット 2023-12-28 20.23.22.png

ユーザー登録画面から画像未設定での登録はできるものの、プロフィール画像を設定しようとするとエラーになってしまう。
スクリーンショット 2023-12-28 20.24.14.png

コードは以下の通りです。

ユーザー登録フォーム

new.html.erb
<% provide(:title, 'Sign up') %>
<h1>新規登録</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_with(model: @user) do |f| %>
      <%= render 'shared/error_messages' %>

 (省略)

      <%= f.label :avatar, 'プロフィール画像' %>
      <%= f.file_field :avatar %>

      <%= f.label :profile, '自己紹介' %>
      <%= f.text_area :profile, autocomplete: 'off', :size =>"50x10" %>

      <%= f.submit "登録", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

プロフィール画面のview

show.html.erb
<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <% if @user.avatar.present? %>
          <%= image_tag asset_path(@user.avatar.url), size: 200 %> <!-- ユーザープロフィール画像 -->
        <% else %>
          <%= image_tag asset_path("8d27ad3552fd86901f4976429ad22ce2.png"), size: 200 %> <!-- プロフィール画像未設定時のデフォルト画像 -->
        <% end %>
      </h1>
      <h1>
        <%= @user.name%>

 (以下省略)

ここで、show.html.erbの画像表示部分で

<%= image_tag asset_path("8d27ad3552fd86901f4976429ad22ce2.png") %>

のようにasset_pathをつけると本番環境にも反映されるという記事を見つけ試してみたのですが上手くいきませんでした。

記事で「本番環境だと取り込んだ画像が表示されない」というような問題はよく見るけど、今回の場合「そもそも登録時に新しい画像を受け付けてくれない」って現象なのでこれとはまた違う問題ってことでしょうか。

些細なことでもご助言いただけると幸いです。


以下追記

ログを読んだところ下のようになりました。スクリーンショット 2023-12-29 1.20.43.png

MiniMagick::エラー ( ImageMagickまたはGraphicsMagick がインストールされている 必要があります )

との内容ですが、既にImageMagickはデバイスにインストールしており、試しにもう一度ターミナルにコマンドを打ってみましたがインストールされているとのことでした。

[% brew install imagemagick
==> Downloading https://formulae.brew.sh/api/formula.jws.json

==> Downloading https://formulae.brew.sh/api/cask.jws.json
######################################################################### 100.0%
Warning: imagemagick 7.1.1-24 is already installed and up-to-date.
To reinstall 7.1.1-24, run:
  brew reinstall imagemagick

この後どのような手順になりますでしょうか…。

0

3Answer

Render.comにデプロイしているようなので、Render.comにLogsのタブがあり、そこからログの確認が可能だと思います(私もRender.comは使ったことないので推測になってしまいます、申し訳ございません。)

2Like

Comments

  1. @tawa19

    Questioner

    Renderの方で確認できました。教えていただきありがとうございます。
    もし可能であれば追記した部分について何かご指摘頂けると嬉しいです。

ログには、どんなメッセージが表示されてますか?ログをみたほうがいいと思いますよ。

1Like

Comments

  1. @tawa19

    Questioner

    ご助言ありがとうございます。
    大変申し訳ないのですが、初心者すぎてログの確認の仕方がわからなくて…
    調べて少し出てきたのはcat /path/to/access_logというコマンドなのですが、これをデバイスのターミナルに打てば良いのでしょうか。
    申し訳ないですがご教授いただけますでしょうか。

  2. アップロードした画像ファイルは本番サーバ上にあることは確認できてますか?

Ruby on Rails は触ったこともないのでハズレかもしれませんが・・・

form タグに含まれる input type="text" などに入力された文字列と一緒に input type="file" でユーザーが選択したファイル(画像もファイル)を、input type="submit" のようなボタンクリックでサーバーに送信しようとしているのですよね?

であれば、普通は form 要素に enctype="multipart/form-data" を付与して multipart/form-data 形式で送信する必要があります。サーバー側もその形式のデータを受信して処理できるようになっていなければならないはずです。そうなっているでしょうか?

・・・と書きましたが、

localhost環境では正常にできるのですが、本番環境で画像のアップロードができず

ということなので、その辺は問題ないのかもしれませんけど、もう少し詳しく以下に書いておきます。問題ないということでしたらスルーしてください。

例えば、以下の画像は form enctype="multipart/form-data" 要素に input type="text" を 2 つ、input type="file" を 1 つ、input type="submit" を 1 つ配置したページを表示し、ユーザーが入力を済ませた状態のものです。

upload1.png

これをボタンクリックで送信すると、データは以下の画像のように multipart/form-data 形式で送信されます。(Fiddler で見た画像)

fiddler.png

それをサーバー側で受け取って処理するということになるはずです。

result.png

そうなっているでしょうか? 上の 2 つ目の画像のように Fiddler などを使ってどういう形式で送信されているか調べてみてはいかがでしょうか?

1Like

Comments

  1. @tawa19

    Questioner

    わかりやすく画像まで付けていただき大変ありがとうございます。
    確認できたログによりますと、画像ファイルの送信まではできている?ようでした。
    追記した部分について何かご存知であれば、ご教授頂けたら嬉しいです。

  2. ImageMagick でアップロードされた画像を加工 (サムネイルを作るとか) していて、それに失敗しているというのが今回の問題なのでしょうか? 本番環境のサーバーで使えることは確認済みなのでしょうか?

    エラーメッセージ MiniMagick::Error (You must have ImageMagick or GraphicsMagick installed) でググるといろいろ出てきますが、調べてみましたか?

  3. @tawa19

    Questioner

    上位3つ程確認したのですがbrew install imagemagickでインストールとのことだったので試してみたのですが進展なくでした。

    本番環境で使えるかというのも確かめることが必要な場合もあるのですね…。知りませんでした。そのあたりも踏まえて調べ直してみます。

  4. 上位3つ程確認したのですがbrew install imagemagickでインストールとのことだったので試してみたのですが進展なくでした。

    ググって調べただけなのでハズレかもしれませんが・・・

    3 つ目の stackoverflow の記事は試しましたか?

    別の記事に「RubyからIMを使うには、RMagickやMiniMagickなどのgemライブラリをインクルードします」と書いてあるのを目にしましたけど。

    質問者さん、問題なく動いているという開発環境は自分で構築したのですか? ではなくて、どこかから完成品のパッケージを入手して使っていて、今回問題になっている部分は自分で作ったわけではないとか?

Your answer might help someone💌