5

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

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

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

如何解决保持资产以正确方式工作的问题?

4

1 回答 1

6

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

通过 Nginx 或 Apache 或任何您的 Web 服务器提供静态资产可能是一个好主意,或者将它们放在 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:应该将文件上传添加到资产管道吗?

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

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

于 2011-10-13T07:58:41.193 回答