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

Ruby 使用Sinatra中的AssetPack访问请求对象,ruby,sinatra,sinatra-assetpack,Ruby,Sinatra,Sinatra Assetpack,我正在使用Sinatra应用程序处理公共资产。因为该应用程序在网站上作为可嵌入广告工作,所以我需要声明css资产为绝对。这是我当前的代码: require 'rubygems' require 'sinatra' require 'rack' require 'sinatra/assetpack' class Ads < Sinatra::Application assets { css :mybanner, "http://#{request.host_with_port

我正在使用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"
    ]
  }
我不确定为什么
请求
不起作用。有什么想法吗?

据我所知,AssetPack在服务器启动时构建资产。
显然,
请求
对象当时不可用

以下是我的建议:

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
类广告
您需要使用_PORT
环境变量设置一个
HOST_,但对每个站点只执行一次

据我所知,AssetPack在服务器启动时构建资产。
显然,
请求
对象当时不可用

以下是我的建议:

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
类广告

您需要使用_PORT
环境变量设置一个
HOST_,但对每个站点只执行一次

它不起作用,因为您在Sinatra应用程序范围之外调用它。如果您注意,您会看到它是从
Sinatra::AssetPack::Options
实例调用的。它不起作用,因为您是从Sinatra应用程序范围之外调用它的。如果注意,您会看到它是从
Sinatra::AssetPack::Options
实例调用的。