使用Sinatra中的AssetPack访问请求对象

时间:2012-08-03 08:42:18

标签: ruby sinatra sinatra-assetpack

我正在使用AssetPack处理我的Sinatra应用上的公共资源。由于该应用作为网站上的可嵌入广告,我需要声明css资产路由绝对。这是我目前的代码:

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无效。有什么想法吗?

1 个答案:

答案 0 :(得分: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环境变量,但每个站点只会执行一次。