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

Kop*_*pty 2 ruby haml sinatra

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

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

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

%img(src=@filepath)
Run Code Online (Sandbox Code Playgroud)

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

<img src="uploads/filename.jpg">
Run Code Online (Sandbox Code Playgroud)

这个文件确实存在于我的文件夹结构中.但是,图像显得破碎.

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

谢谢.

Ser*_*sev 5

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

set :public_folder, 'my_root' # this will make my_root dir the web root.
Run Code Online (Sandbox Code Playgroud)

因此,要使您的上传对互联网可见,请将它们放入您的公共文件夹中.

阅读本文以获取更多Sinatra设置和自定义.