Я перебрал все вопросы о стековом потоке, касающиеся этой ошибки: 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