【问题标题】:Rails 3.1 assets not recognizing new images uploaded by rmagick until server restart在服务器重新启动之前,Rails 3.1 资产无法识别 rmagick 上传的新图像
【发布时间】:2011-10-13 07:50:13
【问题描述】:

我的Rails 3.1.0 应用程序在production 环境中与passenger 一起运行,并且我有一个部分,应用程序允许用户更改他的个人资料图片,因此我使用ajax 上传器上传图片,并在我的控制器中上传文件并使用 rmagick 为图像生成不同大小的图像,然后我使用 image_tag 渲染新图像,但应用程序在我重新启动服务器之前不会显示图像。

我得到的是No route matches [GET] "assets/path/to/image.png"

如果我重新启动服务器它会显示图像,但显然我不能每次用户上传新图像时都重新启动服务器。

我该如何解决保持资产正常工作的问题?

【问题讨论】:

    标签: ruby-on-rails-3.1 rmagick assets ajaxuploader


    【解决方案1】:

    Rails 资产管道确实适用于结构/设计图像,例如背景、图标、横幅等。)。动态资产应该放在公共目录中[来源如下]

    通过 Nginx 或 Apache 或任何您的网络服务器提供静态资产可能是个好主意,或者将它们放在 Rails 应用程序的公共目录中。

    这应该可以解决您的问题......例如为静态资产创建一个单独的路径,您可以使用 rmagick /carrierwave 或任何您喜欢的 gem 将这些图像上传到其中。

    资产管道只知道启动期间存在的图像。因此,将静态/上传的资产分离到一个单独的目录中,并直接通过网络服务器提供服务,将有所帮助——它也应该更快。

    你的配置中需要这样的东西:

    # Disable Rails's static asset server (Apache or nginx will already do this)
    config.serve_static_assets = false
    
    # Compress JavaScripts and CSS
    config.assets.compress = true
    
    # Don't fallback to assets pipeline if a precompiled asset is missed
    config.assets.compile = false
    
    # Generate digests for assets URLs
    config.assets.digest = true
    
    # UNCOMMENT the header that your server uses for sending files
    # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
    # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
    

    更一般:

    http://railscasts.com/episodes/279-understanding-the-asset-pipeline

    http://guides.rubyonrails.org/asset_pipeline.html

    Rails 3.1: Should File Uploads be added to asset pipeline?

    关于在资产管道之外提供图像:

    http://mrjaba.posterous.com/rails-31-asset-pipeline-with-nginx-and-passen

    http://trackingrails.com/posts/rails-31-and-asset-pipeline-problems-with-apache

    http://pastebin.com/kC4Ba40U

    https://github.com/defunkt/resque/issues/418

    【讨论】:

    • 情况是我将我的Rails 3.1.0 应用程序部署在我的网络服务器的根目录上,所以我没有其他方法来提供文件,而是稍后通过它自己的应用程序来执行此操作我们将使用 CDN 或 Amazon 的 S3,但现在我们将通过 rails 应用程序提供图像,我看到了禁用 rails 3 上默认提供的资产的方法,但我们现在正在使用其他优势资产和使用 Rails 核心,谢谢。
    • 您仍然可以在 Rails 之外执行此操作,例如告诉您的 Apache 或 Nginx Web 服务器提供一个附加目录,该目录在 Rails 中没有路由。
    • 你有关于 apache 的一些信息吗?因为我现在在我的域的根 / 上提供应用程序,谢谢。
    • 是的,您还应该阅读新的资产管道——这在 3.1 中发生了很大变化:railscasts.com/episodes/279-understanding-the-asset-pipeline 可能还有 jackchu.com/rails-31-asset-pipeline-content-delivery-netw
    猜你喜欢
    • 2016-03-05
    • 2019-04-28
    • 2012-11-15
    • 2011-11-14
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多