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

时间:2016-09-27 23:54:03

标签: sinatra assets rack sprockets

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

config.ru中的Sprockets Rack定义是:

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>

该选项返回以下消息:

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

显然,这是因为Sprockets“filename”方法返回完整路径,而页面无法访问本地文件系统。我需要的是一个返回服务器相对路径的方法。

2 个答案:

答案 0 :(得分:0)

好吧,只是另一个头脑发热的时刻......

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

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

效果很好。

答案 1 :(得分:0)

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