乘客没有显示一些图像Rails 3.2.11

时间:2013-01-25 01:07:28

标签: ruby-on-rails apache ubuntu paperclip passenger

好的,所以我在CentOS服务器上运行Ruby on Rails,它运行正常。目前正在尝试将相同的应用程序迁移到除了图像的特定文件夹之外的Ubuntu服务器,我似乎无法弄清楚正在发生什么。

我正在通过Capistrano进行部署,因此我正在部署到当前文件夹。这是我的apache .conf文件设置:

<Virtualhost *:80>
    ServerName myserver
   DocumentRoot  /var/www/folder/current/public
   <Directory /var/www/folder/current/public>
      Allow from all
      Options -Multiviews
   </Directory>
</VirtualHost>

这些文件存在于我的应用程序中(在资产/供应商下)。在构建或预编译或部署期间,我没有遇到任何错误。尝试在新服务器上提供文件时,我收到以下消息:

Started GET "/system/vendors/logos/000/000/002/original/filename.png?1354897276" for 68.188.46.74 at 2013-01-25 00:51:37 +0000

ActionController::RoutingError (No route matches [GET] "/system/vendors/logos/000/000/002/original/filename.png"):
  actionpack (3.2.11) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (3.2.11) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'

我已经尝试过权限更改,包括777 tmp文件夹(我通常不会这样做),只是为了看看是否有所作为。

看起来系统资产管道文件夹位于我的共享目录中,但是我没有看到像我登录日志目录那样的符号链接。所以我尝试创建一个符号链接,但没有做任何事情。

我很茫然。有什么建议?

编辑1/25

当我发布这个时,我没有注意到它是一个回形针上传的图像,这就是为什么这些图像在系统路径中。所以我通过logo属性中的视图来调用它们,logo属性在模型中定义如下:

  has_attached_file :logo

在我看来,我是通过这个来称呼的:

          <%= image_tag(vendor.logo.url, :class => 'rounded'); %>

同样,这适用于其他两台服务器,因此迁移正在清除影响它,我认为它可能与权限相关?

ImageMagick安装在服务器上。

2 个答案:

答案 0 :(得分:2)

由于Rails在app/assets环境中运行时不会提供lib/assetsvendor/assetsproduction目录中的文件,因此不会提供这些文件。

此文件应该位于public目录中,位于请求指定的路径中。通过将其放在那里,您可以获得额外的好处,即文件将由运行Passenger(Apache / Nginx)的Web服务器提供,而不是Rails。这意味着请求将比Rails提供的请求快得多。

请确保您要提供的所有静态文件都位于public目录及其子目录中最高速度

答案 1 :(得分:0)

所以ryan's answer是在正确的轨道上,但我想我会填写整个细节,因为这可能会帮助其他人。

我正在使用Paperclip进行Rails上传,我不确定这个问题的全部原因,但也许是Rails更新,但无论如何,我最终更改了以下设置以将这些设置转移到正确的文件夹:

has_attached_file :logo, 
:path => ':rails_root/public/uploads/:attachment/:basename..:extension', 
:url => '/uploads/:basename.:extension'

您可以遵循更多选项,但这符合我的需求。

所以现在我的文件最终出现在我的/ public / uploads目录中,这个目录正常。您必须手动移动已上载的任何文件。在本地,他们会在您部署时自动与您一起移动。