我在我的网页上有一个旋转图像作为横幅,它通过一个目录并从'./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">
网站运行正常。
我认为我没有正确浏览目录,或者我没有正确映射数组。我不确定如何进一步排除故障。
答案 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