使用HAML在Sinatra上运行的Ruby应用程序,无法访问uploads目录中的文件?

时间:2012-07-04 08:50:17

标签: ruby sinatra haml

我有一个Ruby应用程序,它是一个Image Resizer。它使用RMagick gem来做到这一点。该应用程序要求用户上传文件,然后调整其大小并保存新生成的文件。

似乎Sinatra默认将所有上传的文件放入'uploads'目录,新生成的文件似乎也保存在那里。我假设这是默认行为,不知道如何改变这一点,但目前这不是一个直接的问题(虽然如果你知道如何做到这一点,也会受到赞赏)。

现在,在正确生成文件后显示的'success.haml'页面中,我试图用简单的img标签显示新生成的图像。该文件的路径位于@filepath中,所以当我这样做时:

%img(src=@filepath)

呈现的HTML(使用Firebug检查时)正确显示

<img src="uploads/filename.jpg">

这个文件确实存在于我的文件夹结构中。但是,图像看起来很破碎。

关于如何克服这个问题的任何想法?

谢谢。

1 个答案:

答案 0 :(得分:5)

相对URL(uploads/filename.jpg)被调用,因为它们与Web根相对。在Sinatra中,这是公用文件夹。默认情况下,它位于您的app目录中并被称为public。但你可以覆盖它。

set :public_folder, 'my_root' # this will make my_root dir the web root.

因此,要使您的上传内容对互联网可见,请将它们放入公用文件夹。

Read this了解更多Sinatra设置和自定义。