1

我有一个 rake 任务,它将图像存储在ActiveStorage. 在同一个 rake 任务中,我需要这些图像的附件 URL。

在正常的 Rails 上下文中,我会使用url_for(my_attachment). 但是,该助手在 rake 任务中不可用。

我试图包括路线助手:

task my_task: :environment do
  include MyApp::Application.routes.url_helpers

  attachment = my_model.image.attach(..)
  url_for(attachment)
end

结果是:

*** NoMethodError Exception: undefined method `attachment_url' for main:Object

有没有办法在 rake 任务中获取附件的公共 URL?

4

2 回答 2

1

显然,.attach(..)返回一个数组。以下确实有效:

task my_task: :environment do
  include MyApp::Application.routes.url_helpers

  attachment = my_model.image.attach(..).first

  Rails.configuration.default_url_options[:host] = 'localhost'
  url_for(attachment)
end

如果尚未设置主机,default_url_options则还需要设置主机。

于 2018-03-04T18:20:34.760 回答
0

我最终为我在 rake 任务中使用的图像的永久链接编写了自己的自定义控制器。这似乎很hacky,但可能是预期的行为,我不确定。这可能会为某人节省大量时间:

class ImageFilesController < ApplicationController
  def show
    mymodel = MyModel.find(params[:id])
    send_data(
      mymodel.name_of_attachment.blob.download,
      type: mymodel.name_of_attachment.blob.content_type,
      disposition: :inline
    )
  end
end
于 2020-12-28T01:57:30.540 回答