• 在 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 的验证失败返回后,就需要你重新在上传一次图片了。

  • 我也想了解这个问题,可是我不懂 mongodb,所以有些地方看不懂。我想问问是不是需要新建两个 columns,分别为 likes_count 和 liked_user_ids,就可以了?可是可能因为 mongodb 可以设置成这样,field :liked_user_ids, :type => Array,MySQL 的话没有 Array 这个概念,请问应该怎么设计数据库比较好呢? #1 楼 @huobazi #2 楼 @chucai

  • #45 楼 @Rei 楼主应该早点摆脱动漫萝莉妹子头像了。

  • Linode 最低配置的,使用 Passenger 和 Unicorn 分别可以放多少个站点?就是一般的博客主页,访问人数不多的。听说 Unicorn 要比 Passenger 少一倍。。

  • 不知道 redis-objects,可以否与 MySQL 一起用呢?只用 redis-objects 做存储页面访问次数

  • Capstrano 经验分享 at 2012年08月11日

    #8 楼 @HungYuHei 在 git 用户和 deploy 两个用户上都把自己的公钥加进.ssh/authorized_keys 里了,一开始只有 git 里有,后面提交不到,就往 deploy 里也加了。 在服务器手动连连接一次?只是我从 终端 ssh git@IP,到服务器吗?

  • Capstrano 经验分享 at 2012年08月11日

    @fresh_fish @Rei @Zernel 可否知道 Net::SSH::Disconnect: connection closed by remote host 这个错误是因为什么呢?

  • Capstrano 经验分享 at 2012年08月10日

    在一台服务器,本来已经设置好,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 怎么设计比较好呢?

  • @poshboytl

    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
    
  • Ruby 资源网站分享 at 2012年07月27日

    楼上的两个站点很好。感激不尽。希望有更多人推荐一下,blog 之类都不错。不过 WIKI 上都有很多。

  • #11 楼 @poshboytl 这个我也觉得奇怪,但是我也出现了一样的问题。

  • 声明 has_many 时,总是应该添加附加的约束

    我想理解一下这个。例如添加什么约束条件?

  • #6 楼 @azhao 这个方法好像不错哦。 我是 rails g migration DropTablename 然后在里面敲入:

    def up
      drop_table :tablename
    end
    
  • @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 上面。

  • 我决定晒一下我的桌面 at 2012年07月02日

    我也是做淘宝的,所以一看你桌面就 FEEL 到了。 透明胶,纸箱,泡沫填充,最关键是那个称!