Отсутствующий хост для ссылки на ошибку в Rails 5.2.1 - PullRequest
1 голос
/ 08 марта 2019

Я перебрал все вопросы о стековом потоке, касающиеся этой ошибки: https://duckduckgo.com/?q=rails+Missing+host+to+link+to

Во всех публикациях упоминается одно и то же решение, а именно добавление конфигурации в файл среды, над которым вы работаете.В моем случае я добавил в свой файл development.rb:

config.active_storage.service = :local
config.action_mailer.default_url_options = { host: "localhost", port: "3000" }
MyApp::Application.default_url_options = Robson::Application.config.action_mailer.default_url_options
Rails.application.routes.default_url_options = Robson::Application.config.action_mailer.default_url_options

Но я все еще получаю печально известное сообщение об ошибке:

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

В следующих местах, если я пытаюсь открыть файлчто я загрузил локально:

 open(file.service_url)

или если я пытаюсь получить доступ к файлам из ActiveAdmin (я назвал модель "Вложения", и я использую ActiveStorage)

column(:file) {|a| link_to a.file.filename, a.file.service_url}

Я такжепопытался установить "host" в словаре в качестве параметра в вышеупомянутых функциях "link_to" и "open".Я также попробовал "only_path".

Ничего не работает.

Любая помощь будет оценена!

PS: моя конфигурация активного хранилища:

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

amazon:
  service: S3
  access_key_id: S3_ACCESS_KEY_ID
  secret_access_key: S3_SECRET_ACCESS_KEY
  bucket: S3_BUCKET
  region: S3_REGION

ОБНОВЛЕНИЕ

Попытка использовать rails_representation_url, но с ошибкой неопределенный метод 'Вариация' для ActiveStorage :: Attached

class Attachment < ApplicationRecord
  include Rails.application.routes.url_helpers
  has_one_attached :file
....
def with_uploaded_file
  tempfile = Tempfile.open([file.filename.to_s, File.extname(file.filename.to_s)]) do |file_temp|
  file_temp.binmode unless file.content_type =~ /text/
  require 'open-uri'
  # file_temp.write(open(file.service_url).read)
  file_temp.write(open(rails_representation_url(file, only_path: true)).read)
  file_temp
end
begin
  yield(tempfile)
ensure
  tempfile.unlink
end

1 Ответ

1 голос
/ 21 марта 2019

Я обновил Rails с 5.1 до 5.2 и имел ту же проблему.

Решение: https://github.com/rails/rails/issues/32866

Поэтому, когда у вас есть вариант ActiveRecord вместо

   variant.service_url

до

    rails_representation_url(variant, only_path: true)
...