【问题标题】:Accessing the request object with AssetPack in Sinatra在 Sinatra 中使用 AssetPack 访问请求对象
【发布时间】:2013-11-22 06:17:16
【问题描述】:

我正在使用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 不起作用。有什么想法吗?

【问题讨论】:

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

标签: ruby sinatra sinatra-assetpack


【解决方案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 环境变量,但您只需为每个站点设置一次。

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2018-03-01
    • 1970-01-01
    • 2014-07-20
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多