1

Sinatra アプリで公開アセットを処理するためにAssetPackを使用しています。アプリはサイトで埋め込み可能な広告として機能するため、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ん。何か案が?

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ますが、サイトごとに1回だけ設定します。

于 2012-08-03T10:50:49.180 に答える