Rails 5.2如何解决缺失链接主机!请提供:host参数。

4
在本地环境下,它可以正常工作。在使用 ActiveModelSerializers 时,在 Heroku 生产环境中,我一直收到此错误消息。我已经使用了 active_model_serializers (~> 0.10.2)。
ArgumentError (缺少链接的主机!请提供:host参数,设置default_url_options[:host]或将:only_path设置为true):
我已经阅读了以下内容:
- Missing host to link to! Please provide :host parameter or set default_url_options[:host] (ActionView::Template::Error) - Missing host to link to! Please provide the :host parameter, for Rails 4 我已尝试在./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的视频中看到的那样。
# ./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

我也尝试过像Remear在ActiveModelSerializers的这个pull request的最后一条评论中建议的那样,在./config/application.rb中定义它。
以下是我的堆栈跟踪。我试图在装饰器中获取用户的个人资料照片。

enter image description here

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

你能添加堆栈跟踪吗? - Jagdeep Singh
我同时添加了一张照片和其副本 @JagdeepSingh - PrimeTimeTran
方法 most_recent_profile_photo 是什么意思? - Jagdeep Singh
它查看User模型,获取最近的个人资料照片(属于UserUpload的模型),然后查看所附上传媒体的URL(他们的个人资料照片托管到AWS)。 - PrimeTimeTran
当我查看JSON时,本地运行良好。https://imgur.com/a/D3TSqiV - PrimeTimeTran
2个回答

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

1
我正在使用ActiveStorage @Przemek。 - PrimeTimeTran

1

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

include Rails.application.routes.url_helpers

我通过更新我的生产环境文件来解决了这个问题,如下所示:

# production.rb

Rails应用程序路由默认URL选项[:host] ='lit-brushlands-65490.herokuapp.com'

3
回答技术问题时,重要的是提供解释说明你为什么以及如何选择你的答案。例如,你的答案与原帖作者的问题有何不同之处?请提供相关叙述。 - Bob Dalgleish
@BobDalgleish 我选择这个答案是因为我在我的情况下解决了同样的问题。而且我没有使用 ActiveModel::Serializer,所以在我看来 include Rails.application.routes.url_helpers 不能正常工作。这个答案对你满意吗? - Sergii Chub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接