• 随手翻《用 TCP/IP 进行网际互联:第三卷 客户端 - 服务器编程与应用》:

    服务器所维护的与客户交互活动的信息称为状态信息。不保存任何状态信息的服务器称为无状态服务器(stateless server),反之则称为有状态服务器(stateful server)。

    面向连接对应的是底层使用 TCP,无连接对应的是 UDP。

    ==========

    HTTP 的无状态,指的就是在在应用层这个层次上,服务器没有保存客户端的状态信息吧,客户端必须每次带上自己的状态去请求服务器(比如 cookie、session 等)。面向连接,就是底层使用 TCP。

    1. 执行 rake 命令时,加上 --trace 选项跟踪一下。
    2. 请根据 #12 楼 @poshboytl 的问题,把当前的环境列出来:比如 rails 版本,Gemfile
  • 不知道是不是 session 的 secret_token 的相同、再加上其他原因导致的?

    觉得在部署 Rails 项目时,config/initializers/secret_token.rb 里的签名密钥应该用rake secret重新生成替换一下。其他需要加密或签名的地方,所需的密钥也要替换。

    BTW: ActiveSupport::MessageEncryptor 加密时,只用到了密钥的前 30 位。而签名类 ActiveSupport::MessageVerifier 可能也只用到前 30 位。

  • 一起来动手写个 gem at 2012年02月14日

    喜欢 +1

    以前都是手动一个一个创建目录和文件的⋯⋯

  • 试试 iframe。

    在第一个 controller 处理后,生成的 views 包含 iframe,这个 iframe 的地址(包括了 id=>'example'的参数)去请求第二个 controller,这样就不会出现在地址栏了。

    但是 iframe 内部的所有链接和表单的 target,都必须是 _top,要不然地址栏就不会变了。

  • #5 楼 @young4u_amy

    git config --global color.diff auto
    git config --global color.status auto
    git config --global color.branch auto
    

    会在 ~/.gitconfig 里生成配置

  • 建议在帖子/邮件标题里不要用“昨天”这类词语⋯⋯最好用 某年某月某日 吧?

  • nginx 的日志在 nginx 的配置文件里配置,就是 error_log 和 access_log 指定的文件。日志文件可以给每个 server 单独指定,也可以用同一个。

    Passenger 的日志就在 Rails 项目下的 log 目录里。有可能是 log/production.log,或者 log/passenger.3000.log 类似的名字

  • 请把 nginx 的 error_log 和 passenger 的相关日志贴出来。

  • ActiveSupport::Memoizable 应该是用来缓存方法结果的模块,源码见 activesupport/lib/active_support/memoizable.rb 这个文件。警告也是从这里出来的。

    railties/guides/source/3_2_release_notes.textile 里有一句:

    Deprecated ActiveSupport::Memoizable in favor of Ruby memoization pattern.
    

    如果 lz 没有使用

    extend ActiveSupport::Memoizable
    

    的话,应该是某个 gem 里使用了 Memoizable,所以有了警告。

    update on Jan 22th:

    昨晚写错了。应该是 extend ActiveSupport::Memoizable 不是 include ActiveSupport::Memoizable

  • 是不是应该把 application.rb:12 这一行内容贴出来看看?

    1. 建议不要在 windows 下开发
    2. linux 这些错误我以前没有遇到过,也不知道如何解决。在 linux 下搭建 ruby/rails 开发环境,建议使用 rvm。请参见本站 wiki: 《如何快速正确的安装 Ruby, Rails 运行环境》 http://ruby-china.org/wiki/install_ruby_guide
  • rake db:migrate 应该只执行 development 的迁移吧?难道 rails 3 里边改变了?

    执行 rake 可以加上 --trace 选项跟踪一下:

    rake db:migrate --trace

    数据库迁移时,也可以把 ActiveRecord 的 logger 设置为 Logger.new(STDOUT) 看看数据库的日志,开发时比较有用。

  • 如果是在终端启动的,把启动日志贴出来看看 :)

  • 没有用过 apache。

    启动 rails 是绑定到 0.0.0.0 了么?如果绑定的是 127.0.0.1 的话,外网无法访问吧? 把启动的过程说一下。

  • 使用一个 path 来标识树状结构,依赖 LIKE 查询的效率。频繁的插入、删除节点只会影响一条记录:

    ancestry https://github.com/stefankroes/ancestry

    The materialised path pattern requires Ancestry to use a ‘like’ condition in order to fetch descendants. This should not be particularly slow however since the the condition never starts with a wildcard which allows the DBMS to use the column index.

    postgresql 有个 ltree 的模块,用的就是 path。

    另外:这种结构有好几个模型的,似乎没有完美的方案在数据库层次上解决“无限节点 + 添加删除节点效率很高”的问题。楼主可以搜索一下,比如关键词 tree, hierarchy structure sql。reddit 是这种树状结构的,也可以参考其实现(包括缓存),不过是 python 写的。

  • 把 post 的数据贴出来看看。

  • 没有遇到过此类问题,不过以前遇到过权限问题。比如运行 redmine 的用户,没有 project.git 的读权限,和某些文件的执行权限(可能是一些 hook)。仅供参考。

  • Lion 10.7.2,Xcode 4.2.1 不能安装(或者是安装好后,编译其他东西会有问题)。 需要按照 2 楼 @hisea 的方法。此时会在 /usr/bin/ 下多一个 gcc-4.2

    ps 我直接在 .bash_profile 里添加了一句,算是一劳永逸吧:

    export CC=/usr/bin/gcc-4.2

  • 也可以间接地通过限制 Hash 的 key 的数量来减少攻击的影响。而且似乎目前可行的方法就是限制 key 的数量。

    具体参考: Bug 750564 - (CVE-2011-4815) CVE-2011-4815 ruby: hash table collisions CPU usage DoS (oCERT-2011-003)

    https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2011-4815

    默认情况下,Rack 会限制请求参数里每个 key 的 key.size 的和,不能大于 65536。主要是两个函数 Rack::Utils.parse_query 和 Rack::Multipart::Parser#parse

    https://github.com/rack/rack/commit/5b9d09a81a9fdc9475f0ab0095cb2a33bf2a8f91#lib/rack/multipart/parser.rb

    evanphx authored December 14, 2011 raggi committed December 28, 2011

    请注意这个提交的时间在 2011 年 12 月。所以老版本的 Rack 都可能受影响。

  • 《ruby 编程语言》这本书 at 2011年12月30日
    1. 去淘宝看看
    2. 去豆瓣看看有没有二手
  • 更新字段时,使用 Model.update_all 就可以避免执行 callback

    increment_counter 内部也是用的 update_all

  • 应该是用 integer 吧。

    不建议把这种经常变化的字段和不经常变的字段放在一张表里,这样会导致 mysql 的 query cache 失效,posts 表很大的时候,就会影响效率;保存时还可能会有很多 callback 会被执行,比如 before_save、更新 updated_at 等,可能导致 lz 不期望的后果。

    PS:那个 click_count 是实例方法,用在了类上面。。。

  • 关于删除问题 at 2011年12月29日

    destroy 和 show 的 URL 是相同的,但是前者用的是 delete 请求(其实是 post),后者是 get 请求。

    这个 post 请求是用 javascript 生成的,进入 show 说明用的是 get 方法,javascript 没有生效。

    是不是没有页面 head 标签里没有引入相关 js 库?

  • rvm 和 gemset 是神器啊。

    在目录里建立 .rvmrc 文件,里边放类似 rvm use 1.9.2@ rails-3.1.3 的命令。这样每次 cd 到这个目录里时,都会自动切换到 ruby-1.9.2,并且使用名字为 rails-3.1.3 的 gemset 了(前提是用 rvm 安装了 1.9.2,并且创建了这个 gemset)。

    上面命令里的 @ 和 rails 之间没有空格哦!

  • 先转成 csv,然后导入 mysql 如何?

  • 可以使用 alias

  • 在 Github 上搜 chardet,有好几个呢

    https://github.com/janx/chardet This is a ruby 1.9 compatible version of chardet on http://rubyforge.org/projects/chardet/

  • 检测编码有没有试过 rchardet? https://github.com/jmhodges/rchardet/

    require 'rubygems'
    require 'rchardet'
    
    cd = CharDet.detect(some_data)
    encoding = cd['encoding']
    confidence = cd['confidence'] # 0.0 <= confidence <= 1.0
    

    Python 有个 chardet http://pypi.python.org/pypi/chardet