在 application_controller.rb 中使用 rescue_from 可以完成大部分工作:
class ApplicationController < ActionController::Base
def self.rescue_errors
rescue_from Exception, :with => :render_error
rescue_from RuntimeError, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
rescue_from ActionController::UnknownAction, :with => :render_not_found
end
rescue_errors unless Rails.env.development?
def render_not_found(exception = nil)
render :template => "errors/404", :status => 404, :layout => 'public'
end
def render_error(exception = nil)
render :template => "errors/500", :status => 500, :layout => 'public'
end
end
但 ActionController::RoutingError 在 rails 3 中却不能得到预期结果,因为 Rails 3 使用了 Rack,Routing 的异常在 ActionDispatch::ShowExceptions 中处理了,而没有传入到 application controller 中。
BAIDU 到的这个方法不知道靠谱 不靠谱。
哈哈。碉堡了。~
#5 楼 @fresh_fish Thanks,一直还不知道 RMagick 有这样的问题。
#2 楼 @tomwey
#4 楼 @metal
官方解释是:Often you'll notice that uploaded files disappear when a validation fails. CarrierWave has a feature that makes it easy to remember the uploaded file even in that case.
实际上使用的效果是这样的,就是当你选择了文件之后,然后把你的文件仿如 cache 中。
例如:如果你的表单有 name,photo(上传图片),而表单验证的要求是,必须 name 是不可以空白或者带有文字,然后这时候,你填写了 name 为 123,而 photo 也上传了图片,然后提交,却无法通过验证。这个适合 cache 的作用就出来了。
当有这行代码<%= f.hidden_field :photo_cache %>
则在验证返回之后,你不需要在重新上传图片,只需要把 name 改为 abc 就可以成功的提交表单了。
而如果没有的话,就会因为图片没有存在 cache 中也没有上传到服务器里,所以当 name 的验证失败返回后,就需要你重新在上传一次图片了。
Linode 最低配置的,使用 Passenger 和 Unicorn 分别可以放多少个站点?就是一般的博客主页,访问人数不多的。听说 Unicorn 要比 Passenger 少一倍。。
不知道 redis-objects,可以否与 MySQL 一起用呢?只用 redis-objects 做存储页面访问次数
#8 楼 @HungYuHei 在 git 用户和 deploy 两个用户上都把自己的公钥加进.ssh/authorized_keys 里了,一开始只有 git 里有,后面提交不到,就往 deploy 里也加了。 在服务器手动连连接一次?只是我从 终端 ssh git@IP,到服务器吗?
@fresh_fish @Rei @Zernel 可否知道 Net::SSH::Disconnect: connection closed by remote host 这个错误是因为什么呢?
在一台服务器,本来已经设置好,git 用户,和 deploy 用户权限之类了。所以写 deploy.rb 很简单。之前的服务器 cap deploy 都很顺利。然后自己弄个 VPS 的时候,发现好像权限之类的问题很复杂。实在不太理解,我 deploy 是存储站点,nginx 读取 deploy 用户,git 用户只是电脑代码 push 上去 XXX.GIT。git 和 deploy 之间的权限应该是怎么样才对? 然后请问有出现过这样的错误吗?
servers: ["74.207.243.XXX"]
connection failed for: 74.207.243.XXX (Net::SSH::Disconnect: connection closed by remote host)
疯狂了。弄了好久都没有搞清楚问题究竟是在哪里产生的。
#11 楼 @leomao10 这样子不可以,当你非 admin 用户访问 namespace 里面的 product 的时候,依然可以访问 index 和 show 页面的。 https://github.com/ryanb/cancan/wiki/Admin-Namespace 我认真看了一下 wiki 发现有写,创建另外一个 Ability 就可以很好的处理这个问题了。
#6 楼 @1272729223 https://github.com/ryanb/cancan/wiki/Role-Based-Authorization 我看的是这里的 roles 设计,清晰易懂。
我这里有一个 CANCAN 的问题,不知道谁能帮我解决一下。就是当我使用了 namespace 的时候
resources :products #1
namesapce :admin do #2
resources :products
end
如果我希望 namespace 下的 products 只可以让 admin 管理的话,如果直接对 Product 进行会同事对 namespace 和非 namespace 的 Prodcut 进行了操作。例如我希望#1 的可以让所有的人浏览只需要:
can :read, :all
同时#2 处的也会变成所有人都可以浏览。请问这个时候的 cancan 怎么设计比较好呢?
Authentication.new(:provider => auth[:provider],
:uid => auth[:uid]).attributes
原来是这个会返回所以的 attributes 的值,其中包括有 created_at 和 updated_at。改一改可以解决这个问题:
def create_auth(auth)
user = create!(
:nickname => auth[:info][:nickname],
:email => auth[:info][:email])
user.authentications.build(:provider => auth[:provider],
:uid => auth[:uid])
end
楼上的两个站点很好。感激不尽。希望有更多人推荐一下,blog 之类都不错。不过 WIKI 上都有很多。
#11 楼 @poshboytl 这个我也觉得奇怪,但是我也出现了一样的问题。
声明 has_many 时,总是应该添加附加的约束
我想理解一下这个。例如添加什么约束条件?
@poshboytl 这个问题在视频处备注一下,会不会比较好呢?
CMS 和 gem‘rails_admin“本质应该就是一样的吧。
#10 楼 @yedingding 哈哈。不好意思。就是这样子。如果:
meta_tag('episode-url', 'http://railscasts-china.com/assets/episodes/video/013-live-show-with-ye-dingding-1.mp4')
加入的是死的链接,就没有问题。我使用了 paperclip。
meta_tag('episode-url', @video.asset.try(:url)) #asset.try(:url)为视频链接,保存在数据库的字段
就没有办法读取视频。不过谢谢你。我看看文档应该可以解决这个问题。问题应该在 paperclip 这个 gem 上面。
我也是做淘宝的,所以一看你桌面就 FEEL 到了。 透明胶,纸箱,泡沫填充,最关键是那个称!