我正在使用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
无效。有什么想法吗?
答案 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
环境变量,但每个站点只会执行一次。