新手问题 paperclip 在 production 环境下裁减图片后显示不出来,只有重启 rails 服务才能正常显示

tianlitao · 2014年10月17日 · 最后由 tianlitao 回复于 2014年10月18日 · 2699 次阅读

在 development 下一切正常,重启 rails 后可以正常显示。 本人菜鸟一枚,刚接触 rails,很多地方不懂,搜这个问题搜了一上午也没找到解决办法。不知道具体问题出在哪里。 图片不显示,但是 console 里也不报错

也正在看 paperclip 这个控件,不过我的需求跟你不一样,我做其他类型文件上传

App 9850 stderr: ActionController::RoutingError (No route matches [GET] "/assets /users/1/thumb/2014-07-19_09_07_09%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE. png"):

log 提示这个错误

贴出显示图片的代码。

#3 楼 @Rei = image_tag(@information.avatar.url(:thumb)) 就这一句 而且我现在试了试部署到 nginx 上,如果多刷新几遍有时候也可以刷新出来

图片是保存到了什么目录?

#5 楼 @Rei ' :url => "/assets/users/:id/:style/:basename.:extension" ' 在 rails s -e production 下显示不出来刷新也不行,部署到 nginx 上的话多刷新几次能够刷新出来,不理解是什么原因 如果显示不出来重启 rails s -e production 的话就可以显示出来

不太确定问题,直觉觉得放在 assets 目录会有问题,这个目录一般用来放需要编译的网站静态文件。

最近我遇到了类似的问题,我来说一下自己的看法。

在 production 中运行 Rails,通常是有另外的 Server App 的,如 Apache 和 Nginx,它们可以完成对静态资源的请求响应,并将对动态资源的请求转发给真正的 Rails 程序,让 Rails 来处理。

在 development 模式中,Rails 程序跟上面提到的静态资源服务器没半点关系,所以一个rails s命令之后,针对 localhost:3000 的各种请求就全靠 Rails 程序本身了,而 Rails 程序又是依赖 routes.rb。

Rails 的设置参数中有一项:config.serve_static_assets,该参数是针对 Rails 程序中包含的静态资源,如图片,如果设为true,Rails 中的 rack 就可以响应所请求的静态资源,否则就会遇到 Routing Error。

需要注意的是,该参数在 production 中需设为false

#8 楼 @PengEdy 'config.serve_static_assets =false' 这项已经设置成了 false,还是不行,每次只要重启 rails s -e production 才能显示

#9 楼 @tianlitao 你设置成 true 试试。

#10 楼 @PengEdy true 和 false 的效果一样

#11 楼 @tianlitao 嗯嗯 - -这也是我的困扰所在。我查了很多,大家都是这样说,但没有更进一步的分析了。

#7 楼 @Rei 大神就是大神,改了改路径就可以了,不知道到底是哪里的问题,大神指个思路,到底是为什么啊,我去查查

#12 楼 @PengEdy 我这个问题解决了,因为路径的问题,不清楚原因,原来图片存到 assets 下现在改为 :url => '/images/:id/:style/:basename.:extension', :path => ':rails_root/public/images/:id/:style/:basename.:extension' 就可以了

#14 楼 @tianlitao 多谢,我去看看我的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号