【问题标题】:jruby regex different on windows from os x?jruby 正则表达式在 Windows 上与 os x 不同?
【发布时间】:2010-09-13 12:45:22
【问题描述】:

我有一个要在 rails 中打印的 jruby 正则表达式:

@@private = /somethingthatshouldnevermatch/
def secure?
  puts "security test(#{action_name}/#{@@private}: #{@@private.match(action_name).nil?.to_s}"
  action_name =~ @@private
end

在 os x 上,使用 WEBRick 和 jruby,打印出来

security test(index/(?-mix:somethingthatshouldnevermatch):

在windows上,这会打印出来

security test(index/?-mix:):

我用warbler把它包装成一个war,然后放到windows上的tomcat目录中。

什么给了?

编辑 - 摩尔信息

问题原来是环境设置。莺默认为“生产”,而不是开发。但是,我仍然不明白为什么它会这样。

更多细节 - 这是我在我的 RoR 应用程序中实现安全性的方式。我在ApplicationController 上有一个secure? 方法,并在子类中覆盖@@private 的值。看起来环境设置为生产,正则表达式停止在基类中初始化。每个人都是\\,这导致了我剩下的问题。

想法?

【问题讨论】:

  • 您的代码看起来与您提供的示例输出有所不同。最好将问题缩小到一个可以在irb 中运行的简单示例,这样我们就可以更轻松地查看发生了什么,并将您从中获得的实际输出发布到每个系统上。
  • 这是一个错字。从那以后我已经更新了代码。

标签: ruby-on-rails regex jruby tomcat6 warbler


【解决方案1】:

我建议剥离层层以找到根本原因(或排除您认为的原因)。在这种情况下,剥离 warbler、rails 等并使您的逻辑可以在 jirb 中运行(正如 Brian 建议的那样)。

我稍微修改了你的代码,我可以在 jirb 中运行它吗:

def secure?(action_name)
    puts "security test(#{action_name}/#{@@private}:#@@private.match(action_name).nil?.to_s}"
    action_name =~ @@private
end

调用secure?("index") 返回:

security test(index/(?-mix:somethingthatshouldnevermatch): true

我理解的是你所期望的,但不是你得到的。

如果我不得不猜测,我会说变量 action_name 不是您所期望的。我的 Rails 知识有点生疏,我看不到 Rails3 API 文档中描述的这个变量。可能它不是正式的公共 API 的一部分?

您正在运行哪个版本的 jruby 和 rails?我在 Windows XP 上运行 jruby 1.5.1。

【讨论】:

  • action_name 的值如何影响正则表达式对象的值?这就是这里的问题 - 没有设置正则表达式。 action_name 是一个 RoR 参数,它告诉您调用的操作的名称。
  • 对,对...你能试试用局部变量代替类变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 2011-04-02
  • 2010-11-16
  • 2014-08-16
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多