#10 楼 @jinleileiking 你真能扯淡
ruby -v ruby 1.9.3p129 (2012-02-17 revision 34654) [i686-linux]
rvm reinstall 1.9.3-head
1.9.3p0 :016 > User.set_primary_key "email"
=> nil
1.9.3p0 :017 > User.find "[email protected]"
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '[email protected]' LIMIT 1
@tualatrix 这不是路由的问题。 你可以在 controller 里打印一下 params[:id] 应该是输出"1224hello"
这应该是 ORM 的特性,比如 ActiveRecord:
1.9.3p0 :006 > User.find 3
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
1.9.3p0 :007 > User.find "3"
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
1.9.3p0 :008 > User.find "3hello"
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
可以这么转换一定是利用了 Ruby 的特性:
1.9.3p0 :009 > "123hello".to_i
=> 123
Ruby 的字符串转换成整数还可以用 Integer 方法,和 to_i 有一点区别:
1.9.3p0 :011 > Integer("123")
=> 123
1.9.3p0 :012 > Integer("123hello")
ArgumentError: invalid value for Integer(): "123hello"
ActiveSupport::BufferedLogger#auto_flushing is deprecated. Either set the sync level on the underlying file handle like this:
f = File.open('foo.log', 'w')
f.sync = true
ActiveSupport::BufferedLogger.new f
Or tune your filesystem. The FS cache is now what controls flushing. ActiveSupport::BufferedLogger#flush is deprecated. Set sync on your filehandle, or tune your filesystem.
上面是 3.2 的 changlog 大概的意思是,auto flushing 方法已经取消了。 现在想调节写 log 的 buffer 可以有两种方案: 1.设置文件打开方式:sync or async 2.调节操作系统的的 cache 来控制 fushing。。。这个我也不知道怎么调。。。:-)
bufferlog 在 rails2.3 就有的。
~/mine/rails -> (no branch) $ git co v2.3.4
HEAD is now at a43ef24... Prepare for 2.3.4 release
~/mine/rails -> (no branch) $ git grep auto_flushing
actionpack/test/template/benchmark_helper_test.rb: logger.auto_flushing = false
activesupport/CHANGELOG:* BufferedLogger#auto_flushing = N flushes the log every N messages. Buffers with an array instead of string. Disa
不能每种语言指定一个字体?
有无状态是和 ftp 相比的吧
大三,听说学计算机的好找工作。。学了 Ruby
错误输出说的很清楚了 gemfile 里没加 thin
ActiveRecord 吗
8 号耶!
@zhangjingqiang @huacnlee @azhao
而 bundle update 會重新產生整個 Gemfile.lock 檔案,更新所有 Gem 到最新版本。但是,一次升級太多套件,可能會造成除錯上的困難。因此會建議如果要升級,請執行 bundle update gem_name 一次升級一個套件。
所以,再 Gemfile 里面,要再 gem 'foo' 的后面加上版本号嘛,以免一不小心 bundle update 带来的问题。
这样有 N 个 gem 就要运行 N 次 bundle update..........
问:为什么要一次升级一个 gem? 答:因为会一次报很多错误,难以排错
问:为什么会一次报很多错误,难以排错? 答:因为很久没升级了,导致一次会升级很多 gem,并且很多 gem 都是旧的。
问:为什么很久没升级了? 答:因为升级困难
问:怎么困难? 答 1:锁定了版本号,要升级就需要知道每个 gem 的最新版本号,并且修改 gemfile....... 答 2:因为要运行 N 次 bundle update gemname.............. -------------------华丽的分割线------------------ 问:为什么要加版本号? 答:以免一不小心 bundle update 带来的问题
问:源码控制是做什么的? 答:.... -------------华丽的分割线----------------------- 问:不锁定版本号导致开发机器和部署环境代码不一致怎么办?而且我遇到过这种情况。。 答:你的 bundle 使用方法错了。。
所以,我觉得上面两种升级方案都不靠谱。而且理由很牵强。
解决办法就是: 1.不锁定版本号 2.小步升级,频繁升级,fail fast 3.使用 SV 和 gemnasium 4.了解你使用的 gem
这里是按照上面原则从 rails3.1.0rc4 升到 rails3.2.1,并且保持其他 gem 也是最新版本的一个实践: https://github.com/hooopo/rubyist/commits/master/Gemfile.lock
再推荐一下这篇... http://rubyeye.herokuapp.com/articles/27