【问题标题】:Passenger not showing some images Rails 3.2.11乘客未显示某些图像 Rails 3.2.11
【发布时间】:2013-01-25 01:07:27
【问题描述】:

好的,所以我在 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 属性中的视图调用它们,如下所示:

  has_attached_file :logo

在我看来,我是这样称呼它的:

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

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

ImageMagick 已安装在服务器上。

【问题讨论】:

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


    【解决方案1】:

    这些文件没有被提供,因为 Rails 在 production 环境中运行时不会提供来自 app/assetslib/assetsvendor/assets 目录的文件。

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

    请确保您希望提供的所有静态文件都位于public 目录及其子目录中,以实现最大速度

    【讨论】:

    • Ryan,我发帖时忘记了这一点,但现在记住为什么它们在那个位置,它们最初是上传到我的应用程序(在另一台服务器上)。我想我需要重新配置 Paperclip 才能发布到公共文件夹?
    • 是的,它们应该被上传到public/system目录而不是vendor/assets
    【解决方案2】:

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

    我正在使用 Paperclip 进行 Rails 上传,我不确定导致此问题的全部原因,但可能是 Rails 更新,但无论如何,我最终更改了以下设置以将它们移到右侧文件夹:

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

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

    所以现在我的文件最终位于我的 /public/uploads 目录中,该目录正在运行。您必须手动移动已上传的所有文件。当您部署时,它们会在本地自动移动。

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多