【问题标题】:Rails 5.2 how to fix Missing host to link to! Please provide the :host parameterRails 5.2 如何修复缺少要链接的主机!请提供 :host 参数
【发布时间】:2018-11-08 02:54:24
【问题描述】:

在本地,它有效。在Heroku 生产中,我在使用ActiveModelSerializers 时不断收到此错误消息。我用的是active_model_serializers (~> 0.10.2)

ArgumentError(缺少要链接的主机!请提供 :host 参数,设置 default_url_options[:host],或设置 :only_path 为 true):

我已经看完了

我尝试在./app/config/environments/production.rb中定义它

Rails.application.configure do

  config.action_mailer.default_url_options = { host: 'lit-brushlands- 
 65490.herokuapp.com' }

end 

我已经尝试在 ./app/serializers/application_serializer.rb 中定义它,就像我看到 Drifting Ruby 在 2:30 进入 video 一样。

# ./app/serializers/application_serializer.rb
class ApplicationSerializer < ActiveModel::Serializer

  include Rails.application.routes.url_helpers
  default_url_options[:host] = 'lit-brushlands-65490.herokuapp.com'

end

我也尝试在 ./config/application.rb 中定义它,就像 Remear 建议将它作为 ActiveModelSerializers 的 pull request 的最后一条评论一样。

这是我的堆栈跟踪。我尝试在装饰器中获取用户个人资料照片。

2018-05-29T12:40:31.274554+00:00 app[web.1]: I, [2018-05-29T12:40:31.274447 #4]  INFO -- : [b70376bf-4950-4376-bf91-f21a3533e9d3] [active_model_serializers] Rendered ActiveModel::Serializer::CollectionSerializer with ActiveModelSerializers::Adapter::Attributes (1766.98ms)
2018-05-29T12:40:31.274941+00:00 app[web.1]: I, [2018-05-29T12:40:31.274854 #4]  INFO -- : [b70376bf-4950-4376-bf91-f21a3533e9d3] Completed 500 Internal Server Error in 1877ms (ActiveRecord: 126.0ms)
2018-05-29T12:40:31.276753+00:00 app[web.1]: F, [2018-05-29T12:40:31.276654 #4] FATAL -- : [b70376bf-4950-4376-bf91-f21a3533e9d3]
2018-05-29T12:40:31.276834+00:00 app[web.1]: F, [2018-05-29T12:40:31.276754 #4] FATAL -- : [b70376bf-4950-4376-bf91-f21a3533e9d3] ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true):
2018-05-29T12:40:31.276923+00:00 app[web.1]: F, [2018-05-29T12:40:31.276835 #4] FATAL -- : [b70376bf-4950-4376-bf91-f21a3533e9d3]
2018-05-29T12:40:31.277014+00:00 app[web.1]: F, [2018-05-29T12:40:31.276930 #4] FATAL -- : [b70376bf-4950-4376-bf91-f21a3533e9d3] app/decorators/user_decorator.rb:13:in `most_recent_profile_photo'
2018-05-29T12:40:31.277017+00:00 app[web.1]: [b70376bf-4950-4376-bf91-f21a3533e9d3] app/serializers/user_serializer.rb:11:in `profile_photo_url'
2018-05-29T12:40:31.277019+00:00 app[web.1]: [b70376bf-4950-4376-bf91-f21a3533e9d3] app/controllers/v1/posts_controller.rb:10:in `index

【问题讨论】:

  • 你能添加堆栈跟踪吗?
  • 我添加了一张照片和它的副本@JagdeepSingh
  • 方法most_recent_profile_photo是什么?
  • 它查看User 模型,抓取最近的个人资料照片(属于UserUpload 的模型),然后查看附加上传媒体的 URL(他们的托管到 AWS 的个人资料照片)。 gist.github.com/PrimeTimeTran/9924674dd2ea2f860d6b0e9b67ce3bd8
  • 当我查看 JSON 时,它在本地运行良好。 imgur.com/a/D3TSqiV

标签: ruby-on-rails heroku active-model-serializers


【解决方案1】:

我假设您在 AWS 中使用 carrierwave。错误可能不是直接来自Serializer,请检查carrierwave 的设置

也许您在开发中使用不同的主机并且需要更改

CarrierWave.configure do |config|
  config.fog_provider = 'fog/aws'                        # required
  config.fog_credentials = {
    provider:              'AWS',                        # required
    aws_access_key_id:     'xxx',                        # required
    aws_secret_access_key: 'yyy',                        # required
    region:                'eu-west-1',                  # optional, defaults to 'us-east-1'
    host:                  's3.example.com',             # optional, defaults to nil
    endpoint:              'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = 'name_of_directory'                                   # required
  config.fog_public     = false                                                 # optional, defaults to true
  config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" } # optional, defaults to {}
end

【讨论】:

  • 我正在使用 ActiveStorage @Przemek
【解决方案2】:

我没有使用ActiveModelSerializers,但我遇到了同样的错误,但这并没有为我解决:

include Rails.application.routes.url_helpers

我通过更新我的生产环境文件来修复它,如下所示:

# production.rb

Rails.application.routes.default_url_options[:host] ='lit-brushlands-65490.herokuapp.com'

【讨论】:

  • 当您回答技术问题时,重要的是要提供说明您选择答案的原因和方式的说明。例如,您的回答与原始发帖人在他们问题中的回答有何不同?
  • @BobDalgleish 我选择这个答案是因为我解决了同样的问题。我没有使用ActiveModel::Serializer,所以include Rails.application.routes.url_helpers 在我看来不能正常工作。这个答案让你满意吗?
猜你喜欢
  • 2016-07-08
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2017-12-31
  • 2014-04-12
相关资源
最近更新 更多