我正在使用Sprockets的Sinatra项目。当我在资源文件夹中添加新样式表时,我收到此错误:
编译CSS资产时出错
Sprockets :: NotImplementedError:自定义asset_path助手不是 实施
使用自定义方法扩展您的环境上下文。
environment.context_class.class_eval do def asset_path(path, options = {}) end end
我做错了什么?
答案 0 :(得分:2)
我按照错误消息的建议:我在asset_path
中定义了config.ru
方法:
environment.context_class.class_eval do
def asset_path(path, options = {})
"/assets/#{path}"
end
end
我仍然不确定为什么需要这样做,但它让错误消失了。
答案 1 :(得分:1)
要在 Padrino 中修复相同的错误,我在app.rb
中定义了此方法,并将environment
更改为assets
:
assets.context_class.class_eval do
def asset_path(path, options = {})
"/assets/#{path}"
end
end
答案 2 :(得分:0)
已经提议,您需要为您的环境定义方法asset_path
。
此方法由CSS文件中常用的helpers like image_url, ...使用。您可能希望根据options[:type]
那样使其略有不同。
示例:
environment.context_class.class_eval do
def asset_path(path, options = {})
if type = options[:type]
"/assets/#{type.to_s.pluralize}/#{path}"
else
"/assets/#{path}"
end
end
end
这样做会使asset_url
返回/assets/path/to/your/file
,而image_url
帮助将返回/assets/images/path/to/your/file
答案 3 :(得分:0)
我们不需要一个sprockets调用实例吗? 对于我正在玩的Rails应用程序,我在config.ru中使用它来摆脱错误。
map '/assets' do
environment = Sprockets::Environment.new
environment.context_class.class_eval do
def asset_path(path, options = {})
"app/assets/#{path}"
end
end
environment.append_path 'app/assets/javascripts'
environment.append_path 'app/assets/stylesheets'
run environment
end