是否有 returns 资产相对路径的 Sprockets 方法?

Is there a Sprockets method that returns the relative path of the asset?

这是一个使用 Sprockets Rack 端点的 Sinatra 应用程序。当我从 HTML 页面引用 JavaScript 文件时,我想使用相对路径指向它的位置,而不是仅将脚本文件包含到 HTML 中。这样做至少会加强调试。

链轮齿条在config.ru中的定义是:

map '/assets' do
  SPROCKETS = Sprockets::Environment.new
  SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/js')
  SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/css')
  SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/fonts')
  SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets')
  SPROCKETS.paths.each{|path| puts path;}
  SPROCKETS.js_compressor  = :uglify
  SPROCKETS.css_compressor = :scss
  run SPROCKETS
end

为了在 HTML 中引用一个 JavaScript 文件,我在脚本标签中定义了它,该标签有效地将源作为字符串包含在内,如下所示:(有效)

<script><%= SPROCKETS["frontend.js.erb"].to_s %></script>

我想做的是将文件作为独立来源引用如下:

<script type="text/javascript" src="<%= SPROCKETS["frontend.js.erb"].filename %>"></script>

那个选项returns下面的消息:

Not allowed to load local resource: file:///C:/Bitnami/rubystack-2.2.5-3/projects/myapp/public/assets/js/frontend.js.erb

很明显,出现这种情况是因为Sprockets "filename"方法returns完整路径和页面无法访问本地文件系统。我需要的是一种returns服务器相对路径的方法。

好吧,又​​是一个拍脑袋的时刻...

应该使用我输入的 config.ru 中定义的标准资产路径,如下所示:

<script type="text/javascript" src="assets/frontend.js.erb"></script>

效果很好。

您尝试过使用 sprockets-helpers gem 吗?这适用于最新的链轮版本。 gem 允许您使用辅助方法来生成您所需要的内容。如果您使用的是 SASS,您还可以检查 sprockets-sass gem。非常适合 Sprockets 2.x 和 3.x。