2011-11-09 61 views
2

在我的應用程序爲我設置的一部分,我:公衆沒有按預期返回路徑。錯誤或功能?

set :public, Proc.new { File.join(root, 'public') } 

,但如果我看看我的配置塊變量public,它是代表了整個應用程序(或者看起來是)一個對象

public.to_json --> 

{"extensions":[],"conditions":[],"routes":{}, 
"inheritable_attributes":{},"errors":{},"prototype":null,"active_user":null, 
"templates":{},"filters":{"after":[],"before":[]}, 
"middleware":[],"models_are_loaded":true} 

但在使用我的配置塊public只是解析爲'public'

這是竊聽我,因爲每個請求我的應用程序現在抱怨說,它「不能轉換成類字符串」爲林Ë

set :images, Proc.new {File.join(public, 'images')} 

但是,很奇怪這個用來做工精細

有事在Ruby或西納特拉改變在過去的三個星期(我一直在度假,這工作我離開之前)?

注意我也試過把set :public, ...位註釋掉,因爲我曾經這麼做過,但是這樣做的結果相同。

回答

4

從sinatra 1.3開始,public已被棄用,有利於public_folder。這樣做是爲了避免超載Module#public

它現在:

dir = File.dirname(__FILE__) 
set :public_folder, "#{dir}/public" 

我不知道爲什麼你正在使用你的例子Proc雖然...

+0

感謝。我剛剛使用過'Proc',因爲這是各種文檔如何說明的,當時我知道Ruby很少。直到現在,它的工作很好,所以認爲可以改變它。但是,是的,我看到我可以通過多種方式優化此應用程序:-) –

+0

是的,我想像'Proc'在早期版本上工作,因爲它是如何讀取設置的。我的猜測是他們已經改變了設置處理代碼。 – mikeycgto