2012-01-19 58 views
0

我的網頁上有一個旋轉圖像作爲橫幅,它通過一個目錄並從'./public/images/banner'目錄返回一個隨機圖像。這段代碼在我在Passenger上運行我的應用程序時工作,但在嘗試切換到FastCGI時崩潰了。Rails 3在公共目錄中映射文件數組

這裏是我的應用程序/視圖/佈局/ application.html.erb導致該問題的行:

<img id="header-picture" src=<%= "/images/banner/" + Dir["./public/images/banner/*.png"].map { |file| File.basename(file) }.shuffle.first %>> 

我得到的錯誤:

ActionView::Template::Error (can't convert nil into String) 

如果我將其更改爲例如:

<img id="header-picture" src="/images/banner/example.png"> 

該網站運行正常。

我認爲我沒有正確地瀏覽目錄,或者我沒有正確地映射數組。我不確定如何進一步解決問題。

回答

1

當你做Dir["./public...."]它正在尋找相對於當前正在運行的ruby腳本的路徑。您當前的服務器設置可能正在耗盡不同的工作目錄。總是強制它搜索相對於你的應用程序的根目錄是最安全的。因此,改變Dir["./public/images/banner/*.png"].map到這樣的事情,而不是:

Dir["#{Rails.root}/public/images/banner/*.png")].map 

Dir[File.join(Rails.root, "public", "images", "banner", "*.png")].map 
+0

感謝,肯定解決了這個問題。我在那條路上,但並沒有完全到達那裏。我真的很感謝答案。 –