_has_many_attached :file_attachments
_という1つのモデルで基本的なActiveStorageをセットアップしています。他のサービスでは、メインアプリの外部で使用するリンク(メール、ジョブなど)を生成しようとしています。
S3を運用環境で使用すると、_item.file_attachments.first.service_url
_を実行でき、S3バケット+オブジェクトへの適切なリンクを取得できます。
Rails guides:Rails.application.routes.url_helpers.Rails_blob_path(item.file_attachments.first)
で規定されているメソッドを使用できません
次のエラーが発生します:_ArgumentError: Missing Host to link to! Please provide the :Host parameter, set default_url_options[:Host], or set :only_path to true
_ _Host: 'http://....'
_引数を渡すことができますが、それでも完全なURLは生成されず、パスのみが生成されます。
開発中ディスクバックアップファイルストレージを使用していますが、どちらの方法も使用できません。
_> Rails.application.routes.url_helpers.Rails_blob_path(item.file_attachments.first)
ArgumentError: Missing Host to link to! Please provide the :Host parameter, set default_url_options[:Host], or set :only_path to true
_
ここでホストを設定しても、完全なURLは生成されません。
本番環境では_service_url
_は機能しますが、開発ではここでエラーが発生します。
_> item.file_attachments.first.service_url
ArgumentError: Missing Host to link to! Please provide the :Host parameter, set default_url_options[:Host], or set :only_path to true
_
ホストを指定しても役に立ちません:
_item.file_attachments.first.service_url(Host:'http://localhost.com')
ArgumentError: unknown keyword: Host
_
私も追加してみました
_config.action_mailer.default_url_options = { :Host => "localhost:3000" }
config.action_storage.default_url_options = { :Host => "localhost:3000" }
Rails.application.routes.default_url_options[:Host] = 'localhost:3000'
_
成功しませんでした。
私の質問は-開発と本番の両方で機能する方法で完全なURLを取得するにはどうすればよいですかまたはホストをどこに設定しますか?
Active Storageのディスクサービスは、ActiveStorage::Current.Host
でURL生成用のホストを見つけることを期待しています。
ActiveStorage::Blob#service_url
を手動で呼び出す場合は、ActiveStorage::Current.Host
が設定されていることを確認してください。コントローラから呼び出す場合、サブクラス ActiveStorage::BaseController
を使用できます。それがオプションではない場合、ActiveStorage::Current.Host
フックにbefore_action
を設定します。
class Items::FilesController < ApplicationController
before_action do
ActiveStorage::Current.Host = request.base_url
end
end
コントローラーの外部で、ActiveStorage::Current.set
を使用してホストを提供します。
ActiveStorage::Current.set(Host: "https://www.example.com") do
item.file_attachments.first.service_url
end