1

我正在使用AssetPack处理我的 Sinatra 应用程序上的公共资产。因为该应用程序在网站上作为可嵌入广告工作,所以我需要声明 css assets route absolute。这是我当前的代码:

require 'rubygems'
require 'sinatra'
require 'rack'
require 'sinatra/assetpack'

class Ads < Sinatra::Application

  assets {
    css :mybanner, "http://#{request.host_with_port}/css/styling.css", [
      "http://#{request.host_with_port}/css/styling.css"
    ]
  }

问题是打电话时request.host_with_port出现以下错误

NameError: undefined local variable or method `request' for #    <Sinatra::AssetPack::Options:0x007fc1f88b0a80>

我不确定为什么request不工作。任何的想法?

4

1 回答 1

1

据我了解,AssetPack在服务器启动时构建资产。
显然,该request对象当时不可用。

这是我的建议:

class Ads < Sinatra::Application
  host_with_port = ENV['HOST_WITH_PORT']

  assets {
    css :mybanner, "http://#{host_with_port}/css/styling.css", [
      "http://#{host_with_port}/css/styling.css"
    ]
  }
end

您需要设置一个HOST_WITH_PORT环境变量,但您只需为每个站点设置一次。

于 2012-08-03T10:50:49.180 回答