随手翻《用 TCP/IP 进行网际互联:第三卷 客户端 - 服务器编程与应用》:
服务器所维护的与客户交互活动的信息称为状态信息。不保存任何状态信息的服务器称为无状态服务器(stateless server),反之则称为有状态服务器(stateful server)。
面向连接对应的是底层使用 TCP,无连接对应的是 UDP。
==========
HTTP 的无状态,指的就是在在应用层这个层次上,服务器没有保存客户端的状态信息吧,客户端必须每次带上自己的状态去请求服务器(比如 cookie、session 等)。面向连接,就是底层使用 TCP。
--trace
选项跟踪一下。不知道是不是 session 的 secret_token 的相同、再加上其他原因导致的?
觉得在部署 Rails 项目时,config/initializers/secret_token.rb 里的签名密钥应该用rake secret
重新生成替换一下。其他需要加密或签名的地方,所需的密钥也要替换。
BTW: ActiveSupport::MessageEncryptor 加密时,只用到了密钥的前 30 位。而签名类 ActiveSupport::MessageVerifier 可能也只用到前 30 位。
喜欢 +1
以前都是手动一个一个创建目录和文件的⋯⋯
试试 iframe。
在第一个 controller 处理后,生成的 views 包含 iframe,这个 iframe 的地址(包括了 id=>'example'的参数)去请求第二个 controller,这样就不会出现在地址栏了。
但是 iframe 内部的所有链接和表单的 target,都必须是 _top,要不然地址栏就不会变了。
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 这一行内容贴出来看看?
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
evanphx authored December 14, 2011 raggi committed December 28, 2011
请注意这个提交的时间在 2011 年 12 月。所以老版本的 Rack 都可能受影响。
更新字段时,使用 Model.update_all 就可以避免执行 callback
increment_counter 内部也是用的 update_all
应该是用 integer 吧。
不建议把这种经常变化的字段和不经常变的字段放在一张表里,这样会导致 mysql 的 query cache 失效,posts 表很大的时候,就会影响效率;保存时还可能会有很多 callback 会被执行,比如 before_save、更新 updated_at 等,可能导致 lz 不期望的后果。
PS:那个 click_count 是实例方法,用在了类上面。。。
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