我正在经历一个奇怪的问题.我的控制器调用drb对象
@request_handler = DRbObject.new(nil, url)
availability_result = @request_handler.fetch_availability(request, @reservation_search, params[:selected_room_rates])
Run Code Online (Sandbox Code Playgroud)
这个Drb对象正在进行一些搜索.
但有时候,在linux环境中,我得到了一个带有这个堆栈跟踪的"0xdba87b30是回收对象"
---
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:375:in `_id2ref'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:375:in `to_obj'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1402:in `to_obj'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1704:in `to_obj'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:613:in `recv_request'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:911:in `recv_request'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1530:in `init_with_client'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1542:in `setup_message'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1494:in `perform'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1589:in `main_loop'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1585:in `loop'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1585:in `main_loop'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1581:in `start'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1581:in `main_loop'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1430:in `run'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1427:in `start'
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1427:in …
Run Code Online (Sandbox Code Playgroud) 我对网络编程很新(或者实际上,它已经很老了,因为我上次与网络混乱是HTML 1.1),但现在需要快速部署Web应用程序.似乎每次我转身时,都会有新的首字母缩略词和技术需要学习(JSON,XMLRPC,GWT,Javascript,Rails等).
这是我的应用必须做的事情:
我已经有了Java脚本和数据库来处理数据.在一台机器上,我可以运行一系列命令行程序来处理传入的数据块并将结果放回到mysql数据库中.那已经存在并且有效.
我想使用这些现有和经过测试的方法构建此任务的Web前端.我现在倾向于这种方法:
这是我的问题:看起来大多数用于Web的Ruby应用程序都会自动尝试构建某种本地数据库.我发现的所有Rails教程都是从创建自己的数据库并与之交互开始的,这正是我不想做的事情.
Rails是适合我的技术,还是使用Ruby DRb?我应该探索一些其他技术吗?
如果Rails或Ruby是正确的东西,我应该看什么?我已经有了编程Ruby书,并且已经将它用于一些后端内容以及使基本的DRb工作.
我有一个启动DRb服务的脚本,然后生成一个处理程序对象并等待通过DRb.thread.join
.我想脚本运行直到明确杀死,所以我补充说
trap "INT" do
DRb.stop_service
end
Run Code Online (Sandbox Code Playgroud)
它成功地停止了DRb服务并在Ruby 1.8下退出,但在1.9下似乎死锁(在OS X 10.6.7上).采样过程显示出几条线程在旋转semaphore_wait_signal_trap
.
我假设我在打电话的方式做错了stop_service
,但我不确定是什么.任何人都可以给我任何指示如何正确地去做它?
我一直非常喜欢用Pry开发Ruby应用程序.我还看到了一个名为pry -remote的Pry插件,它允许你设置一个Drb服务器来远程访问Pry会话.README中的pry-remote概要是有道理的,我在本地运行没有问题.但是,我如何使用它来允许同事在他/她的终端中访问相同的Pry会话?
如果可能的话,我想要的API就像localtunnel:
在电脑1上:
$ ruby main.rb
[pry-remote] Waiting for client on druby://127.0.0.1:9876
$ drblocaltunnel 9876
share this url:
http://xyz.drblocaltunnel.com
Run Code Online (Sandbox Code Playgroud)
在电脑2上:
$ drblocaltunnel login -url http://xyz.drblocaltunnel.com
Frame number: 0/4
From: /programming/drb/main.rb @ line 5 Foo#initialize:
4: def initialize(x, y)
=> 5: binding.remote_pry
6: end
Run Code Online (Sandbox Code Playgroud) 我想使用Qt在Ruby中编写一个应用程序,它将通过网络与其他实例进行通信.
如何将Qt的事件循环与DRb或EventMachine集成?
编辑:
当我有更多时间发布时,我找到了答案
我是Python的新手.只是想知道python中有没有类似ruby的drb的模块?像客户端可以使用drb服务器提供的对象?