如何在Ruby中设置套接字超时?

如何设置Ruby套接字上的阻塞操作的超时?

Ruby on Rails Rake资产:预编译错误

我是Rails开发的新手,这是我第一次部署到Heroku。 当我执行我的应用程序(部署后)时出现错误: 2011-09-18T21:05:54+00:00 app[web.1]: Completed 500 Internal Server Error in 10ms 2011-09-18T21:05:54+00:00 app[web.1]: 2011-09-18T21:05:54+00:00 app[web.1]: ActionView::Template::Error (application.css isn’t precompiled): 我搜索了这个,发现我必须预编译我的资产,但是当我尝试这样做时,我发现了另一个错误: $ bundle exec rake assets:precompile RAILS_ENV=production rake aborted! No such process – /usr/lib/ruby/gems/1.8/gems/pg-0.11.0/lib/pg_ext.so (See full trace by running task with –trace) 我还没有找到解决这个问题的方法。 是否有人知道如何解决这个问题?

Rubydependency injection库

我一直在寻找一些Rubydependency injection库。 特别是,我检查了Needle和Copland 。 他们已经存在了很长一段时间,但并没有很多用法。 使用这两个库有哪些优点和缺点? 看起来好像很多库/框架都可以很好地利用这两个库,例如Merb / Datamapper的Hook 。

使用可确认设计 – 当用户尝试使用未经证实的电子邮件登录时,将用户重定向到自定义页面

启用可确认模块后,Devise将不允许未经确认的用户在预定义的时间段过后登录。 而是将用户重定向回登录页面,并显示“您必须先确认帐户才能继续”。 这是一种不受欢迎的交互模型,因为闪存通知没有提供足够的空间来向用户正确解释访问被拒绝的原因,“确认您的帐户”的含义,提供重新发送确认的链接以及如何检查的说明您的垃圾邮件文件夹等。 有没有办法可以更改此行为以重定向到特定的URL?

如何使用gets.chomp测试函数?

我有一个使用gets.chomp的简单函数,如下所示: def welcome_user puts “Welcome! What would you like to do?” action = gets.chomp end 我想用ruby的内置TestCase套件测试它,如下所示: class ViewTest < Test::Unit::TestCase def test_welcome welcome_user end end 问题是,当我运行该测试时, gets.chomp停止测试,因为它需要用户输入某些内容。 有没有办法可以使用ruby模拟用户输入?

通过SO_RCVTIMEO套接字选项在Ruby中设置套接字超时

我试图通过SO_RCVTIMEO套接字选项在Ruby中使套接字超时,但它似乎对任何最近的* nix操作系统没有影响。 使用Ruby的Timeout模块不是一个选项,因为它需要为每个超时生成并加入线程,这可能会变得很昂贵。 在需要低套接字超时且具有大量线程的应用程序中,它基本上会导致性能下降。 在许多地方都已经注意到这一点,包括Stack Overflow 。 我已经阅读了Mike Perham关于此主题的优秀post,并努力将问题减少到一个可运行代码文件,创建了一个将接收请求的TCP服务器的简单示例,等待请求中发送的时间量和然后关闭连接。 客户端创建套接字,将接收超时设置为1秒,然后连接到服务器。 客户端告诉服务器在5秒后关闭会话,然后等待数据。 客户端应在一秒钟后超时,但在5之后成功关闭连接。 #!/usr/bin/env ruby require ‘socket’ def timeout sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) # Timeout set to 1 second timeval = [1, 0].pack(“l_2”) sock.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, timeval # Connect and tell the server to wait 5 seconds sock.connect(Socket.pack_sockaddr_in(1234, ‘127.0.0.1’)) sock.write(“5\n”) # Wait for data to […]

有没有办法在ruby 中返回方法参数名称

可能重复: 在Rubyreflection中获取参数名称 是否可以获取方法的参数名称? 示例: def method_called(arg1, arg2) puts my_method.inspect end 我想知道应该调用什么方法(my_method)来获得以下输出: [“arg1”, “arg2”]

Ruby – 参考引用或值?

我不明白为什么他们说 Ruby按值传递所有参数,同时下面的代码certificate了相反: class MyClass1 @var1 = 123 def get1 @var1 end def set1=value @var1 = value end end c1 = MyClass1.new c1.set1 = 444 p c1.get1 # 444 def test1 mc mc.set1 = 999 end test1 c1 p c1.get1 # 999 如果它是按值计算的,它将打印出444而不是999 。

为什么Ruby似乎从case语句中提升变量声明,即使该代码路径没有被执行?

我们定义一个函数foo: def foo(s) case s when’foo’ x = 3 puts x.inspect when ‘bar’ y = 4 puts y.inspect end puts x.inspect puts y.inspect end 然后我们将其称为: 1.9.3p194 :017 > foo(‘foo’) in foo scope 3 in outer scope 3 nil => nil 1.9.3p194 :018 > foo(‘bar’) in bar scope 3 in outer scope nil 3 => nil […]

使用Ruby / Mechanize(和Nokogiri)从HTML中提取单个字符串

我从论坛中提取数据。 我的脚本基于工作正常。 现在我需要从单个post中提取日期和时间(2009年12月21日,20:39)。 我无法让它发挥作用。 我使用FireXPath来确定xpath。 示例代码: require ‘rubygems’ require ‘mechanize’ post_agent = WWW::Mechanize.new post_page = post_agent.get(‘http://www.vbulletin.org/forum/showthread.php?t=230708’) puts post_page.parser.xpath(‘/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()’).to_s.strip puts post_page.parser.at_xpath(‘/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()’).to_s.strip puts post_page.parser.xpath(‘//[@id=”post1960370″]/tbody/tr[1]/td/div[2]/text()’) 我的所有尝试都以空字符串或错误结束。 我找不到有关在Mechanize中使用Nokogiri的任何文档。 Mechanize文档在页面底部显示: 使用Mechanize导航到需要刮擦的页面后,使用Nokogiri方法刮取它。 但有什么方法呢? 我在哪里可以通过样本和解释语法阅读它们? 我也没有在Nokogiri的网站上找到任何东西。