这是使用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”方法返回完整路径,而页面无法访问本地文件系统。我需要的是一个返回服务器相对路径的方法。
答案 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.