0

我有一个在 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 应用程序中实现安全性的方式。我有一个secure?方法ApplicationController,并覆盖@@private子类中的值。看起来环境设置为生产,正则表达式停止在基类中初始化。它\\适用于每个人,这导致了我的其他问题。

想法?

4

1 回答 1

0

我建议剥离层以找到根本原因(或排除您认为的原因)。在这种情况下,剥去莺、铁轨等,让你的逻辑可以在 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。

于 2010-09-13T04:45:22.097 回答