7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】'ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true):'が出たときの対処法

Last updated at Posted at 2021-01-02

使用環境

ruby 2.6.5
Rails 6.0.3.4
macOS Catalina 10.15.6

エラー内容

'ArgumentError (Missing host to link to!
Please provide the :host parameter, set default_url_options[:host], 
or set :only_path to true):'

ええと、見たこともないエラーにぶち当たりました。はてはて・・・

やっていたこと

そもそも何をしていてこうなったのかを簡単に説明しておきます。

Ajaxでタイムラインの記事にコメント投稿機能を実装時に、コメント投稿したユーザーのアバター画像を表示させる機能も同時につくっていて、user_serializerをあれこれと調べながらいじっていました。
(以下コード)

user_serializer.rb

class UserSerializer < ActiveModel::Serializer
    include Rails.application.routes.url_helpers
  
    attributes :profile, :avatar_image, :account_name,  :comment_avatar_image
    has_many :comments
    has_one :profile

    def comment_avatar_image
        rails_blob_path(object.avatar_image) if object.avatar_image.attached?
    end

end

このようにcomment_avatar_imageを定義して、JavaScript側は動的にユーザーのコメントと画像(とsユーザー名)を表示するために、appendを使ってこのようにコードを書きました。

timeline.js
const appendNewComment = (comment) => {
      $('.comments-container').append(
        `<div><img class="comments_image"src="${comment.user.comment_avatar_image}"></img></div>
        <div class="comments_name"><p>${(comment.user.account_name)}</p></div>
        <div class="comments_content"><p>${(comment.content)}</p></div>`
      )
  }

しかし上記のエラーが出たので、エラー文を読んでみることに。

「'ArgumentError (リンク先のホストがありません
hostパラメータを指定して、default_url_options[:host]を設定してください。
または :only_path を true に設定してください)'」

とありました。これ通りにやってみます。

解決策

そもそもこのdefault_url_options[:host]はどこかで見たことあるなと思っていたら、deviseの設定をconfigのdevelopment.rbでした時でした。

config/environment/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

私と同じくdeviseを使用してこれを設定した人なら
先ほどの指示の「hostパラメータを指定して、default_url_options[:host]を設定してください。」
これでいうhostはlocalhostになっています。

ではどうすればいいのか?
記事や公式文書を調べていると、以下のような記述をすればいいことがわかりました。

config/environment/development.rb
 host = 'localhost' #←先ほどの上のコードのhost名と合わせる
 Rails.application.routes.default_url_options[:host] = host

これで、一旦サーバーを落としてもう一度起動してリロードしましょう!(意外に忘れがち)
※environment系は一回サーバーを落として立ち上げないと変更が反映されません。

疑問

解決はしましたが、似たような記事を見てもAction Mailerの設定がメインでした。上記のように画像を反映させることに関して、なぜこのような設定が必要なのかはまだ疑問が残るので検索中です。

もし、わかる方がいたらご教授いただけると幸いです。


参考記事

action-mailerのビューでurlを生成する
RailsでMissing host to link to!が出たときに。model内でURL組み立てる場合の設定

7
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?