2012-08-03 68 views
0

我使用AssetPack來處理我的Sinatra應用程序中的公共資產。由於該應用在網站上以嵌入式廣告的形式工作,因此我需要聲明css資源的絕對路由。這是我當前的代碼:在Sinatra中使用AssetPack訪問請求對象

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

它不起作用,因爲您從Sinatra應用程序範圍之外調用它。如果你注意,你會發現它是從'Sinatra :: AssetPack :: Options'實例調用的。 – 2012-08-03 10:38:44

回答

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環境變量,但你會爲每個站點做一次。

相關問題