【问题标题】:How to use asset_url helper in Rake task如何在 Rake 任务中使用asset_url 助手
【发布时间】:2026-02-19 09:10:01
【问题描述】:

如何在 Rake 任务中访问 asset_urlasset_path Sprockets URL 帮助程序?


我有一个 Rake 任务,它使用一些模型为数据库播种。其中一个模型具有 Rails 应用程序中资产的 URL。如何在 Rake 任务中为该资产创建 URL?

SomeModel.create(image: asset_url('awesome.png'))

目前我对这个问题的解决方案真的很糟糕。

path = URI.join(Rails.application.routes.url_helpers.root_url, '/assets/images/awesome.png')
SomeModel.create(image: path.to_s)

【问题讨论】:

  • asset_urlasset_path 这个助手只在 sass 或 scss 中可用。
  • 你为什么使用非相对路径?为什么需要用这些图像为数据库播种?
  • 我假设您正在尝试了解为什么我需要在这种特殊情况下执行此操作,并帮助我找到更好/更简单的解决方案。谢谢,尽管我确实需要不止 1 个 Rake 任务中的asset_url/asset_path 助手。 @jaysqrd,您知道启用此功能的方法吗?
  • 我想知道是否值得花时间构建更简单的东西。可以通过此module 访问asset_path。您可能需要初始化您的应用程序才能这样做(不确定rake 是否会默认这样做)。更简单的方法可能是在模型上提供默认图像,或者只是硬编码种子中的路径。像这样重用逻辑是不值得的,如果它不太可能改变的话。

标签: ruby-on-rails ruby rake sprockets


【解决方案1】:

我刚刚在 rails 5.0.2 上进行了测试

将此添加到您的 rake 类或控制器类中

include ActionView::Helpers::AssetUrlHelper

这将让您使用所有这些方法 http://api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html

【讨论】:

  • 当我尝试使用 capistrano 部署时,将这一行包含在 rake 任务中会导致错误:Sprockets::NotImplementedError: Custom asset_path helper is not implemented
【解决方案2】:

在你的 rake 任务中:

include ActionView::Helpers::AssetUrlHelper

【讨论】:

    【解决方案3】:

    您必须包含ActionView::Helpers 模块然后asset_path 和它的其他助手将可用。

     include ActionView::Helpers
    

    Using helpers in model: how do I include helper dependencies?

    【讨论】: