在处理资产管道时遇到困难:资产"{name}"不在资产管道中。

3
作为将遗留应用从Rails 3迁移到Rails 6的持续努力的一部分,我正在尝试找到最佳方法来处理资产等方面的问题。
我遇到了以下问题,在我尝试添加特定资产时:
<%= image_tag 'images/shared/logos/image.svg' %>

该图片出现在以下位置:

app/assets/images/shared/logos/image.svg

然而,我遇到了标题中提到的错误:

The asset "images/shared/logos/image.svg" is not present in the asset pipeline.

希望能得到有关如何设置新版Rails处理资产的建议,我对整个sprockets vs webpacker的事情有些困惑,我正在尝试找出最好的前进方式。


你不需要images,它是搜索路径的根目录。<%= image_tag 'shared/logos/image.png' %>就足够了。 - undefined
Rails有许多不同的方法来设置资产管道。这令人困惑和分散,并且在“有主见的框架”的背景下毫无意义。 - undefined
2个回答

3

Rails的资产辅助函数会在指定的资产路径(Rails.application.config.assets.paths)中搜索资产。

我不确定Rails 3的情况如何,但是在后续版本的Rails中,默认的搜索路径包括app/assets下的特定子目录(app/assets/stylesheetsapp/assets/images等),但不包括app/assets本身。

因此,您可以从相对路径的开头删除“images”(实际上您需要这样做):

<%= image_tag 'shared/logos/image.svg' %>

如果您现有的应用程序已经定义了许多这样的资源,您可以尝试通过将 app/assets 添加到搜索路径中来解决问题。只需在 config/initializers/assets.rb 中添加以下内容即可:
Rails.application.config.assets.paths << Rails.root.join('app', 'assets')

这将允许Rails在您进行迁移时查找您的资源。

我尝试从开头删除“图像”,但仍然遇到相同的错误。 - undefined
而且没有前导斜杠(否则Rails会将其视为绝对路径)?在控制台中,Rails.application.config.assets.paths中有什么内容? - undefined
这是一个很长的粘贴。我会添加相关的内容:=> ["/home/user/rails-migration/app/assets/config", "/home/user/rails-migration/app/assets/images", "/home/user/rails-migration/app/assets/javascripts", "/home/user/rails-migration/app/assets/legacy", "/home/user/rails-migration/app/assets/public", "/home/user/rails-migration/app/assets/stylesheets", "/home/user/rails-migration/vendor/assets/images", "/home/user/rails-migration/vendor/assets/javascripts", "/home/user/rails-migration/vendor/assets/stylesheets",其余的是gems。 - undefined
它不包括嵌套的资产/图片路径,但包括根目录。 - undefined
我在app/assets的根目录下实际上没有任何资源。我开始觉得最好的做法可能是删除所有子文件夹,并将所有图片移动到app/images文件夹中... - undefined

2
默认的Rails设置不允许向图像文件夹添加目录。您可以在配置中更改此设置或直接将所有图像存储到图像文件夹中。 要在配置中进行更改,请在config/application.rb中添加以下内容。
config.assets.path <<< Rails.root.join('app', 'assets', 'images', 'shared', 'logos')

虽然你可以将目录添加到资源路径中,但绝对不是说你不能将目录添加到图像文件夹中。 - undefined
绝对正确。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接