我在我的erb文件中发布图像之前使用以下代码检查文件是否存在.这是一个ruby/sinatra应用程序 - 而不是rails.
<% @imagename = @place.name + ".jpg" %>
<% if FileTest.exist?( "/Users/Tim/projects/game/public/" + @imagename ) %>
<p><img src= '<%= @imagename %>' width="400" height="300" /> </p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当我将它发布到Heroku时,它显然是行不通的.
我尝试使用相对路径,但我无法让它工作:
<% if FileTest.exist?( "/" + @imagename ) %>
Run Code Online (Sandbox Code Playgroud)
以a开头的路径/不是相对路径,这是绝对路径.它表示转到root,然后向下导航到以下路径
第一步是检查您的应用运行的位置.即什么是当前目录.为此,请暂时放入<%= Dir.pwd %>您的视图并在本地和Heroku上进行尝试以比较这两种环境.
然后尝试从此文件夹到图像的相对路径.例如,如果应用程序/Users/Tim/projects/game从那时开始运行,那么公共的相对路径就是public图像的路径File.join('public', @imagename)
如果您需要更多帮助,请发布Dir.pwd两个环境的值
这是另一种方法:
__FILE__ 是一个特殊的Ruby变量,它给出了当前文件的相对路径.
利用它,在启动应用程序的.rb文件中设置常量,如下所示:
APP_ROOT = File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)
(应用程序的config.rb中的类似行用于RAILS_ROOT在Rails应用程序中设置)
然后在您的视图中,您可以使用:
FileTest.exist?(File.join(APP_ROOT, 'public', @imagename))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4240 次 |
| 最近记录: |