我正在开发一个使用 Sprockets 的 Sinatra 项目。当我在资产文件夹中添加新样式表时,我收到此错误:
编译 CSS 资源时出错
Sprockets::NotImplementedError: 自定义asset_path 帮助器未实现
使用自定义方法扩展您的环境上下文。
environment.context_class.class_eval do def asset_path(path, options = {}) end end
我究竟做错了什么?
我遵循了错误消息的建议:我在以下位置定义了asset_path
方法config.ru
:
environment.context_class.class_eval do
def asset_path(path, options = {})
"/assets/#{path}"
end
end
我仍然不确定为什么需要这样做,但它使错误消失了。
为了修复Padrino中的相同错误,我在 my 中定义了此方法app.rb
并更改environment
为assets
:
assets.context_class.class_eval do
def asset_path(path, options = {})
"/assets/#{path}"
end
end
已经提出,你需要asset_path
为你的环境定义方法。
此方法由诸如 image_url 之类的助手使用,... CSS 文件中常用。根据当时的情况,您可能希望使其有所不同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
我们不需要 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