регулярное выражение jruby отличается от windows от os x?

у меня есть регулярное выражение 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):

на окнах это печатает

security test(index/?-mix:):

Я использовал warbler, чтобы превратить это в войну и поместить ее в каталог tomcat в Windows.

что дает?

изменить — добавить информацию

проблема оказалась в настройке среды. варблер по умолчанию использует «производство», а не dev. однако я до сих пор не понимаю, почему он так себя вел.

более подробно - именно так я реализую безопасность в своем приложении RoR. у меня есть метод secure? для ApplicationController, и я переопределяю значение @@private в подклассах. похоже, что в рабочей среде регулярное выражение перестало инициализироваться в базовом классе. это было \\ для всех, что вызвало остальные мои проблемы.

идеи?


person kolosy    schedule 10.09.2010    source источник
comment
Ваш код выглядит так, как будто он делает что-то отличное от приведенного вами примера. Было бы лучше, если бы вы сузили свою проблему до простого примера, который можно было бы запустить в irb, чтобы нам было легче увидеть, что происходит, и опубликовать фактические результаты, которые вы получаете от этого, в каждой системе.   -  person Brian Campbell    schedule 11.09.2010
comment
это опечатка. я обновил код с тех пор.   -  person kolosy    schedule 11.09.2010


Ответы (1)


Я бы предложил снять слои, чтобы добраться до основной причины (или исключить то, что вы считаете причиной). В этом случае удалите камышевку, рельсы и т. д. и сделайте свою логику работоспособной в jirb (как предложил Брайан).

Я немного изменил ваш код, чтобы запустить его в 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 не соответствует вашим ожиданиям. Мои знания о рельсах немного устарели, и я не вижу описания этой переменной в документе API Rails3. Возможно, это не часть официального публичного API?

Какую версию jruby и rails вы используете? Я использую jruby 1.5.1 в Windows XP.

person Robert Brown    schedule 13.09.2010
comment
как значение action_name повлияет на значение объекта регулярного выражения? вот в чем проблема - регулярное выражение не устанавливается. action_name — это параметр RoR, который сообщает вам имя вызванного действия. - person kolosy; 15.09.2010
comment
Верно, верно... Можете ли вы попробовать использовать локальную переменную вместо переменной класса? - person Robert Brown; 16.09.2010