MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

http://mypages.javaeye.com/blog/291991

posted @ 2010-02-21 02:53 leekiang 阅读(212) | 评论 (0)编辑 收藏

http://andyhu1007.javaeye.com/blog/450384

posted @ 2010-02-21 02:20 leekiang 阅读(248) | 评论 (0)编辑 收藏

根据 Joel Spolsky 的说法:“所有非简单抽象,都存在某种程度的泄漏”。
http://local.joelonsoftware.com/wiki/Chinese_%28Simplified%29

GORM 有助于缓解抽象泄漏问题,它支持使用对 Groovy 有意义的方式表示对象模型,由 GORM 在幕后处理关系数据库的问题。但是正如即将看到的,如果需要,覆盖默认设置也很容易。GORM 并不是隐藏数据库细节的不透明的 抽象层,而是一个半透明的 层 — 它尝试在不进行用户干预的情况下执行正确的工作,但是如果用户需要对它的行为进行自定义,它也可以提供支持。

http://blog.csdn.net/g9yuayon/archive/2007/03/02/1518916.aspx
http://www.ibm.com/developerworks/cn/java/j-gaej3.html
https://www.ibm.com/developerworks/cn/java/j-grails02128/

posted @ 2010-02-20 23:15 leekiang 阅读(520) | 评论 (0)编辑 收藏

open-uri库是ruby的标准附加库中所带的,路径
C:\Ruby1.8.7\lib\ruby\1.8\open-uri.rb

require 'open-uri'
open(
'c:/boot.ini'){|file|
  puts file.
class  #File
}
open(
'http://coderlee.cnblogs.com'){|file|
  puts file.
class  #Tempfile
}
可以看出,打开一个本机文件的块参数是File类型,而打开一个uri的块参数是一个Tempfile类型。还有一点要注意,就是open-uri里面的open方法会自动对302 redirection重定向地址进行追踪访问,而Net::HTTP#get方法则不会自动追踪302重定向地址。(摘自这里)

require 'nokogiri'
require 
'open-uri'
doc = Nokogiri::HTML(open('http://www.huomo.cn'))
doc.search(
"//h2/a").each do |link|
  puts link.inner_text
  puts link[:href]
end

url = 'http://www.google.cn/search?hl=zh-CN&q=%BC%D6%B1%A6%D3%F1'
doc 
= Nokogiri::HTML.parse(open(url), nil, 'gb2312')#不这样写会有乱码

doc.css(
'h3.r a.l').each do |link|
  puts link.inner_text
end

doc.xpath(
'//h3/a[@class="l"]').each do |link|
  puts link.content
end

doc.search(
'h3.r a.l''//h3/a[@class="l"]').each do |link|
  puts link.content
end

参考http://www.javaeye.com/topic/557485

posted @ 2010-02-20 18:14 leekiang 阅读(1123) | 评论 (0)编辑 收藏

另一个常见的问题是当应用软件要执行一个需时长的请求时,处理不当。如果实现得不好,会让处理这个web请求的handler很长时间没有反应。

这个问题是在人机界面方面很普遍,而且也有一个普遍的解决方法 -- 把任务交给一个背景运行的过程或线程。任何开发过桌面应用的人都会觉得很熟悉。但是有时候如果开发者把切换和通信做得不好,也会碰到麻烦。

一个我觉得较好的办法,而幸好我的ThoughtWorks同事们也同意,就是使用一个actor。在这个模型里,web请求的handler把需时长的请求包装为一个命令(command),然后放进队列(queue)内。在背景运行的actor就监察着这个queue,从queue中提出并且执行这个命令。当它把这个命令执行完了,就通知前台界面的actor。通常这个queue一开始会是数据库的一个表,之后如有需要的话,再把它改为一个消息队列(message queue)。

和ActiveRecord的漏洞一样,我提起这个不是因为它是Rails里特有的问题;我们在各种应用也会看到同样的问题。值得在这里带出是因为用Rails的人们往往很容易忘了有这样的情况发生,也忘了有这样的模式去解决。我们发现Rails把web开发中重复又重复的环节变得简易和快,但是复杂的环节是仍然存在的。

来源:http://rickylui.com/lionwiki/index.php?page=Ruby+at+ThoughtWorks
     http://martinfowler.com/articles/rubyAtThoughtWorks.html

posted @ 2010-02-20 04:42 leekiang 阅读(353) | 评论 (0)编辑 收藏

在netbeans6.8(使用ruby1.8.6)的一个rails项目上右键点击"调试",提示未安装版本与0\.4\..*模式匹配的ruby-debug-ide 点击"安装快速调试器",出现如下的错误:
------------------------------------------------------
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-debug-ide:
    ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe mkrf_conf.rb
Building native extensions.  This could take a while...

Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.9 for inspection.
Results logged to c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.9/ext/gem_make.out
------------------------------------------------------
然后在C:\ruby\lib\ruby\gems\1.8\gems下发现了刚刚生成的ruby-debug-ide-0.4.9目录和ruby-debug-base-0.10.3目录。

接着在cmd里gem install ruby-debug,也报错:
------------------------------
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-debug:
        ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb
creating Makefile
nmake
'nmake' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-bas
e-0.10.3 for inspection.
Results logged to c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.3/ext/gem_
make.out
-------------------------------
然后发现ruby-debug-base-0.10.3目录重新生成了。

现在说一下解决步骤:
1,下载http://rubyforge.iasi.roedu.net/gems/ruby-debug-base-0.9.3-mswin32.gem
   gem install ruby-debug-base-0.9.3-mswin32.gem
2, 去http://rubyforge.org/projects/debug-commons/下载ruby-debug-ide-0.4.6.gem
   gem install ruby-debug-ide-0.4.6.gem
   版本不能高于0.4.6,如果高了都报       
      ERROR: Failed to build gem native extension.
   0.4.7见ruby-debug-ide-0.4.7\ext\extconf.rb
   0.4.9见ruby-debug-ide-0.4.9\ext\mkrf_conf.rb
   0.4.6压根就没有ext目录
   有人说要装什么linecache.gem,我没安装。
   还有人装了ruby-debug.gem,我也没安装。
   在http://rubyforge.mirrors.roedu.net/gems里能找到老版本。

感谢http://hlee.javaeye.com/blog/576237

在netbeans里调试时发现有问题,那个绿三角不能点多了,否则会影响后面的调试。


另外不明白gem除了把文件拷到gems目录下,还做了什么。



后面都是记录,仅供参考。
How to enable Ruby debug in RubyMine 2.0 on Windows里说
(If you installed Ruby with the zip binary, reinstall it using the one-click installer as found here. That's because currently the ruby debugger ide only works on Windows using a RubyInstaller installation). Also verify that Ruby's root path doesn't include spaces.
  1. ...略
  2. ...略
  3. ...略
  4. Open with a text editor the file command.rb that's part of the installed ruby-debug-ide19 gem. In my case, that file was under folder C:\Programmi\Ruby19\lib\ruby\gems\1.9.1\gems\ruby-debug-ide19-0.4.12\lib\ruby-debug
  5. Modify the beginning of procedure debug_eval (at line 120) so to enter a new statement between statements str = str.to_s and max_time = 10. The new statement to enter is:
    return "" if str == "$FILENAME"

    At the end, the procedure debug_eval should begin like this:
    def debug_eval(str, b = get_binding)
      begin str = str.to_s
      return "" if str == "$FILENAME"
      max_time = 10
      to_inspect = str.gsub(/\\n/, "\n")

ruby-debug to Ruby 1.9
如果使用的是ruby1.9,则Installation: IDE versionNetBeans 6.7.1 IDE updates.ruby-debug19 only works on Windows using a RubyInstaller installation,Do not install to a path that has a space inside of it.In both cases, you will also need to download and install the DevKit.
原来在ruby-debug-ide 0.4.7 的release notes里说了原因:
Patch by Mark Moseley supporting ruby-debug-base19.
  Dynamically installs right ruby-debug-base dependency depending on the
  version of a Ruby platform being used. ruby-debug-base19 is the only solution
  these days for 1.9 debugging, so might be temporary solution until ruby-debug
  projects brings official version.
另外参见Ruby 2.0 Beta Issue: Error installing ruby-debug-ide19
        Debug supported for ruby 1.8.7?

从下午弄到深夜还没解决关于ruby-debug-ide的问题发现有人解决了:
我试了下ruby1.8.6还是不行,还是报那个异常。没法换成NetBeans6.8集成的jruby,集成的jruby中自带ruby-debug-ide,OK了。在这里提示一下,不要选jruby.exe要选jruby.bat,希望对遇到同样问题的人有所帮助。
问题解决,解决步骤:1.下载rubyinstaller,安装;2.下载devkit,解压到根目录后,修改 “ruby路径”\devkit\msys\1.0.11\etc\fstab为
“ruby路径”/devkit/gcc/3.4.5/mingw32
“ruby路径”/devkit/msys/1.0.11/usr/local /usr/local
然后在命令行窗口,gem install linecache19 这个要好长时间,耐心等待。然后gem install ruby-debug-ide19,这个就快了。这就OK了,不要在rubymine中安装ruby-debug-ide19和linecache19,会报错。


某人的解决办法:
在RubyMine里调试提示需要安装ruby-debug-ide,但是安装的过程有问题,提示:
  ERROR: Failed to build gem native extension.
于是想解开gem包,把里面的extension去掉。但是编辑完之后再用winrar打包gem就认不出来了。看来压缩的格式也很重要。于是找来了tar和gzip两个工具,tar还好,用gzip解压和压缩过的文件还是认不出来。只有另想别的办法了。突然想到把文件解压之后,应该可以用gem的工具来生成一个gem安装文件吧。于是找了一篇制作gem的教程,把extension去掉之后制作了一个gem,居然可以顺序安装了。然后重新打开 RubyMine也可以调试了。

Trying to install ruby-debug-ide on jruby 1.2.0
http://youtrack.jetbrains.net/issue/RUBY-5341
好帖Ruby调试器一览
一个视频
http://netbeans.org/kb/60/ruby/debugger-screencast.html


201010补充:
根本没有那么复杂,
装DevKit,把DevKit\bin设置为环境变量,然后就可以在netbean中安装和执行了

posted @ 2010-02-19 23:22 leekiang 阅读(1786) | 评论 (0)编辑 收藏

posts_url               http://localhost:3000/posts
posts_path              /posts
new_post_path           /posts/new
edit_post_path(post)    /post/:id/edit
redirect_to(@post)     会重定向到/post/:id吗,也就是posts_controller的show

Expected response to be a <:redirect>, but was <200>
测试时报错,后发现是测试里提供的数据没有通过验证

posted @ 2010-02-18 02:42 leekiang 阅读(265) | 评论 (0)编辑 收藏

运行redmine的测试时报错
Missing these required gems:
thoughtbot-shoulda
nofxx-object_daddy
mocha
在控制台里执行gem install mocha
gem install shoulda
和gem install object_daddy
到C:\ruby\lib\ruby\gems\1.8\gems下去看
发现多了object_daddy-0.4.1,shoulda-2.10.3和mocha-0.9.8这3个目录
再执行测试,不报缺少mocha了,但还报缺少另外两个jar

在http://www.redmine.org/boards/2/topics/11130找到了办法
rake gems:install RAILS_ENV=test
以下是在netbeans控制台里输出的信息
gem.bat install thoughtbot-shoulda --source http://gems.github.com
Successfully installed thoughtbot-shoulda-2.10.2
gem.bat install nofxx-object_daddy --source http://gems.github.com
Successfully installed nofxx-object_daddy-0.4.1

然后到C:\ruby\lib\ruby\gems\1.8\gems下去看,发现多了两个目录
nofxx-object_daddy-0.4.1和thoughtbot-shoulda-2.10.2,
奇怪的是与前面相比,目录名和大小都变了。

posted @ 2010-02-17 20:01 leekiang 阅读(434) | 评论 (0)编辑 收藏

1,在ruby中,一个方法的最后一个表达式求值所得的值就是该方法的返回值,这时可以去掉return
2,ruby的符号(symbol)
  symbol都以冒号作为前缀。rails常常用符号来给方法参数命名,以及用作hash的键。譬如说:
  redirect_to :action=>"edit",:id=>params[:id]
3,
class Order < ActiveRecord::Base
 has_many :line_items
 
 
def self.find_all_unpaid
   find(:all, 
'paid = 0' )
 end

 
def total
   sum 
= 0
   line_items.each {
|li| sum += li.total}
 end
end
在方法前加上"self.",该方法就变为类方法,可以在类层面上直接调用:Order.find_all_unpaid

4,实例变量的名字以"@"开头
5,在rails项目下rake doc:app可以为rails项目创建html格式的文档,放在doc/app目录里。
6,模块(module)与类差不多,区别是无法创建模块的实例。
  我的感觉就是module是代码片段,可以在任何类里引入作为该类的一部分。

posted @ 2010-02-17 11:47 leekiang 阅读(263) | 评论 (0)编辑 收藏

				assert_select
				assert_not_nil assigns(:people)
				
assigns是一个特殊的变量。如果您在控制器中创建了一个实例变量,那么这个变量
就可以直接在视图模板中使用。这一机制背后的原理其实很简单:Rails首先通过反射
将控制器中的变量拷贝到一个容器中,其后又将该容器中的变量拷贝回视图实例。
而这个容器其实就是上面提到的assigns,所以前面的断言可以被理解为“控制器应该
创建一个名为people的非空变量”。

http://www.javaeye.com/topic/481193
http://www.infoq.com/cn/articles/rails-for-java-excerpt
http://www.ibm.com/developerworks/cn/web/wa-rails4/
http://www.blogjava.net/cap/articles/rails_test.html

新书Rails Test Prescriptions

posted @ 2010-02-15 19:22 leekiang 阅读(284) | 评论 (0)编辑 收藏

仅列出标题
共54页: First 上一页 15 16 17 18 19 20 21 22 23 下一页 Last