Ruby on rails 3.1 Rails 3.1资产在服务器重新启动之前无法识别rmagick上载的新图像

Ruby on rails 3.1 Rails 3.1资产在服务器重新启动之前无法识别rmagick上载的新图像,ruby-on-rails-3.1,rmagick,assets,ajaxuploader,Ruby On Rails 3.1,Rmagick,Assets,Ajaxuploader,我的Rails 3.1.0应用程序在production环境中与passenger一起运行,并且我有一个部分,在该部分中,应用程序允许用户更改其个人资料图片,因此我使用ajax上传器上传图像,在我的控制器中,我上传文件,并生成不同大小的图像然后,我使用image\u标记渲染新图像,但在我重新启动服务器之前,应用程序不会显示图像 我得到的是没有路径匹配[get]“assets/path/to/image.png” 如果我重新启动服务器,它将显示映像,但显然我不能在用户每次上载新映像时重新启动服务器

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

我得到的是
没有路径匹配[get]“assets/path/to/image.png”

如果我重新启动服务器,它将显示映像,但显然我不能在用户每次上载新映像时重新启动服务器


如何解决保持资源正常工作的问题?

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

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

这就解决了你的问题。。e、 g.为静态资产创建一个单独的路径,使用rmagick/carrierwave或任何您喜欢的gem上传这些图像

资产管道只知道启动期间出现的图像。因此,将静态/上传的资产分离到一个单独的目录中,并直接通过web服务器为其提供服务,这将有所帮助——这也应该快得多

在配置中,您将需要类似于以下内容:

# 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
更一般的:

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


目前的情况是,我正在web服务器的根目录上部署我的
Rails 3.1.0
应用程序,因此我没有其他方法来提供文件,但要通过应用程序来实现这一点,稍后我们将使用CDN或Amazon的S3,但现在我们将通过Rails应用程序来提供图像,我看到了在rails 3上禁用默认资产的方法,但我们现在使用了其他优势,即使用资产和rails core,谢谢。您仍然可以在rails之外执行此操作,例如,告诉您的Apache或Nginx web服务器提供附加目录,在Rails中没有路由。你有关于apache的一些信息吗?因为我现在在我的域的根
/
上为应用程序提供服务,谢谢。这与此有关吗?是的,您还应该阅读新的资产管道——它在3.1中发生了很大的变化:也许