Sinatra上的Sprockets asset_path错误

时间:2012-10-05 16:03:28

标签: sinatra sprockets

我正在使用Sprockets的Sinatra项目。当我在资源文件夹中添加新样式表时,我收到此错误:

  

编译CSS资产时出错

     

Sprockets :: NotImplementedError:自定义asset_path助手不是   实施

     

使用自定义方法扩展您的环境上下文。

environment.context_class.class_eval do
  def asset_path(path, options = {})
  end
end

我做错了什么?

4 个答案:

答案 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