🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2577閲覧

railsAPIでのcarrierwaveの使用において、デフォルト画像がフロント側で参照できないのはなぜか?

msickpaler

総合スコア14

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/12/12 03:01

お世話になっております。

現在、Nuxt.jsとrailsにてスケジュール作成アプリを作っており、スケジュールの投稿に画像の添付機能を加えているところです。

投稿時に画像を設定した場合は、投稿後にそのページへいくと下記のURLへリクエストをしており、期待通り画像が表示されます。
http://localhost:3001/uploads/schedule/s_image/274/tech001.png

しかし、画像を設定しなかった場合はリクエストURLが
GET http://localhost:3000/fallback/default.png 404 (Not Found)
となり、画像を得られません。

私はポートが3001と3000で違うためだと考えておりますが、変更方法がわかりません。

carrierwaveの設定は以下です。

ruby

1# carrierwave.rb 2 3CarrierWave.configure do |config| 4 config.asset_host = 'http://localhost:3001' 5end

アップローダーのファイルは以下です。

ruby

1# app/uploaders/schedule_image_uploader.rb 2 3class ScheduleImageUploader < CarrierWave::Uploader::Base 4 storage :file 5 6 def store_dir 7 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 8 end 9 10 def default_url(*_args) 11 # For Rails 3.1+ asset pipeline compatibility: 12 ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 13 # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 14 end 15 16 def extension_whitelist 17 %w(jpg jpeg png) 18 end 19end

railsのpublic以下のディレクトリ構造は以下です。

~/a/b/public ❯❯❯ tree . ├── fallback │   └── default.png ├── images │   └── fallback │   └── default.png ├── robots.txt └── uploads ├── schedule │  └── s_image │   └── 274 │   └── tech001.png

やってみたこと

以下のようにアップローダーの保存先を変えて見ましたが、やはり同じくポートが3000で404エラーが返ってきました。

ruby

1def default_url(*_args) 2 # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # コメントアウト 3 "/images/fallback/" + [version_name, "default.png"].compact.join('_') # コメントを外した 4end 5

バージョン情報

ruby 2.6.3 rails (6.0.3.4) carrierwave (2.1.0)

お忙しいとは存じますが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

default_url としてホストを含まないパスのみが記録されているんじゃないでしょうか。
<img src="/fallback/default.png"> これでnuxtの3000番にリクエストしてしまう。

ActionController::Base.helpers.asset_path は
config.action_controller.asset_host が設定されているとホストを含むURLを返すようなので

config/environment/development.rb に

config.action_controller.asset_host = 'http://localhost:3001'

と記述してみてください。

この設定後に作られたやつは大丈夫だと思いますが、
すでに保存済みのはこの値を何らかの方法で再設定する必要があるかもしれません。

投稿2020/12/12 04:13

neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msickpaler

2020/12/12 04:27

回答ありがとうございます。 アドバイス通り記述してみると、うまくホストが設定されて画像が表示されました! お恥ずかしながら、あたふたとして、メソッドを調べることを失念しておりました。 dev環境ですのでデータはseedで作り直すことにします。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問