如何在ruby中创建ssh隧道,然后连接到远程主机上的mysql服务器

我想创建一个ruby脚本,我可以通过ssh隧道在远程服务器上运行mysql命令。 现在我有一个手动过程来执行此操作: 创建隧道 – > ssh -L 3307:127.0.0.1:3306 运行ruby脚本。 关闭隧道。 我希望能够自动执行此操作,以便我可以运行脚本。 例: require ‘rubygems’ require ‘net/ssh/gateway’ require ‘mysql’ #make the ssh connection -> I don’t think I am doing this right. Net::SSH.start(‘server’,’user’) do |session| session.forward.local(3307,’127.0.0.1′, 3306) mysql = Mysql.connect(“127.0.0.1″,”root”,””,””,3307) dbs = mysql.list_dbs dbs.each do |db| puts db end session.loop(0){true} end 更新 – 2010-11-10: 我真的很接近这个代码: require […]

Ruby – 确定数字是否为素数

我正在解决Project Euler上的问题,自学Ruby编程。 我知道有一个内置函数可以做到这一点 ,但我正在避免使用内置函数来帮助我学习。 所以我必须编写一个方法来确定一个数字是否是素数。 第一种方法有效,但第二种方法没有。 有人可以解释为什么吗 def is_prime n for d in 2..(n – 1) if (n % d) == 0 return false end end true end def is_prime2 n foundDivider = false for d in 2..(n – 1) foundDivider = ((n % d) == 0) or foundDivider end not foundDivider end

railsstutorial.org中的SessionsHelper:帮助者应该是视图中不需要的代码的通用模块吗?

railstutorial.org有一个建议让我觉得有点奇怪。 它建议这段代码 : class ApplicationController < ActionController::Base protect_from_forgery include SessionsHelper end include SessionsHelper使得方法可以从ApplicationController ,是的,但它也可以在任何视图中使用它们。 我知道认证/授权是跨领域的,但这真的是最好的地方吗? 在我看来,这似乎可能过于宽泛。 在一个更常见的包含视图帮助程序的模块中放置实现比较重定向的before_filter代码(如railstutorial.org示例所示)似乎令人惊讶。 在视图中不严格需要的function是否可以更好地放在ApplicationController或其他地方? 或者我只是在考虑这个问题?

Ruby 1.9:具有未知输入编码的正则表达式

是否有一种可接受的方法来处理Ruby 1.9中的正则表达式,其中输入的编码是未知的? 假设我的输入恰好是UTF-16编码: x = “foobarbaz” y = x.encode(‘UTF-16LE’) re = /(.*)/ x.match(re) => #<MatchData "bar” 1:”bar”> y.match(re) Encoding::CompatibilityError: incompatible encoding regexp match (US-ASCII regexp with UTF-16LE string) 我目前的方法是在内部使用UTF-8并在必要时重新编码(副本)输入: if y.methods.include?(:encode) # Ruby 1.8 compatibility if y.encoding.name != ‘UTF-8’ y = y.encode(‘UTF-8’) end end y.match(/(.*)/u) => #<MatchData "bar” 1:”bar”> 然而,这对我来说有点尴尬,我想问一下是否有更好的方法。

在ruby中支持IMAP IDLE

好吧,我已经好几个小时了。 我认为带有ruby 1.9的net / imap.rb支持idle命令,但还没有。 任何人都可以帮我实现吗? 从这里开始 ,我会这样做: class Net::IMAP def idle cmd = “IDLE” synchronize do tag = generate_tag put_string(tag + ” ” + cmd) put_string(CRLF) end end def done cmd = “DONE” synchronize do put_string(cmd) put_string(CRLF) end end end 但imap.idle只是返回零。

Ruby中的哈希语法

根据The Well Grounded Rubyist : Ruby允许在哈希键位置使用特殊forms的符号表示,在符号之后使用冒号而不是之前的冒号并删除哈希分隔符箭头。 换句话说,这个: hash = { :name => “David”, :age => 49 } 也可以像这样写: hash = { name: David, age: 49 } 我在ruby 1.8.7和1.9.2中尝试了前面的代码 – 它无法正常工作。 我究竟做错了什么?

类中的路由处理程序

我有一个Sinatra应用程序设置,其中大多数逻辑在各种类中执行, post / get路由实例化这些类并调用它们的方法。 我在考虑是否将post / get路由处理程序放在类本身内是一个更好的结构。 无论如何,我想知道是否有可能。 例如: class Example def say_hello “Hello” end get ‘/hello’ do @message = say_hello end end 如果不修改上述内容,Sinatra会说SinatraApplication对象上没有方法say_hello 。

Fibonacci One-Liner

我正试图用Ruby单行解决Project Euler中的问题,我很好奇是否有更优雅的问题解决方案: Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。 从1和2开始,前10个术语将是: 1,2,3,5,8,13,21,34,55,89 …… 通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。 这是我在Ruby中的一行解决方案: (1..32).inject([0,1]) {|arr, i| (arr << arr[-1] + arr[-2] if arr[-1] + arr[-2] <= 4000000) || arr}.inject(0) {|total, i| total += i.even? ? i : 0} 我主要担心的是我只使用范围(1..32),因为我碰巧知道在Fibonacci序列中的数字开始超过4,000,000之前,所有这一切都是必要的。 我不希望这种情况以某种方式构建到单行中,但我无法弄明白。 不允许使用半冒号!

为什么在Windows上使用Mechanize访问SSL站点失败,但在Mac上工作?

这是我用来连接SSL站点的代码。 require ‘mechanize’ a = Mechanize.new page = a.get ‘https://site.com’ 我正在使用Ruby 1.9.3和Mechanize 2.1pre1 +依赖。在Mac上,上面的代码工作并返回页面。在运行相同版本的Windows 7上,它给出了以下错误: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 恢复到Mechanize 2.0.1似乎解决了这个问题,但后来我too many connections reset by peer问题too many connections reset by peer困扰。 因此,这不是解决方案。 我已经尝试过a.verify_mode = false ,但这没有做任何事情。 我已经读过您可以使用以下命令关闭SSLvalidation: open(uri,:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) 如何在Mechanize中将其关闭? 为什么我只在Windows上出现此错误?

Rails用句点(或句号)查询字符串。

我目前正在尝试处理RoR。 我将两个字符串传递给我的控制器。 一个是随机hex字符串,另一个是电子邮件。 该项目用于对数据库进行简单的电子邮件validation。 我遇到的问题是当我输入类似下面的内容来测试我的页面时: http://signup.testsite.local/confirm/da2fdbb49cf32c6848b0aba0f80fb78c/bob.villa@gmailcom 所有我都在我的params哈希:email是’bob’ 。 我离开了. 在gmail和com之间,因为这会导致匹配根本不起作用。 我的路由匹配如下: match “confirm/:code/:email” => “confirm#index” 这看起来很简单,我需要的东西。 我很难弄清楚这笔交易是什么,甚至是如何找到答案。 任何帮助或指导将不胜感激。