Rails 3映射公共目录中的文件数组

时间:2012-01-19 02:36:50

标签: ruby-on-rails-3 fastcgi

我在我的网页上有一个旋转图像作为横幅,它通过一个目录并从'./public/images/banner'目录返回一个随机图像。当我在Passenger上运行我的应用程序时,这行代码工作但在尝试切换到FastCGI时崩溃了。

以下是导致此问题的app / views / layouts / 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 个答案:

答案 0 :(得分: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