2010-09-10 3 views
0

я уже получил JRuby регулярное выражение, которое я печатаю в рельсах:jruby regex разное на окнах от os x?

@@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 на окнах.

Что дает?

редактировать - Moar Информация

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

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

идеи?

+0

Ваш код выглядит так, как будто он делает что-то отличное от результата вывода, который вы даете. Было бы лучше, если бы вы сузили свою проблему до простого примера, который можно было бы запустить в 'irb', поэтому мы можем более легко увидеть, что происходит, и опубликовать фактический вывод, который вы получаете от того, что есть в каждой системе. –

+0

'twas a typo. Я обновил код с тех пор. – kolosy

ответ

0

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

Я изменил код немного я мог бы запустить его в 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 

Что я понимаю, что вы ожидаете, но не то, что вы» re получение.

Если бы я должен был догадаться, я бы сказал, что переменная action_name - это не то, что вы ожидаете. Мои знания рельсов немного ржавые, и я не вижу эту переменную, описанную в документе Rails3 API. Возможно, это не часть официального публичного API?

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

+0

Каким образом значение action_name влияет на значение объекта регулярного выражения? это проблема здесь - регулярное выражение не задано. action_name - это параметр RoR, который сообщает вам имя вызываемого действия. – kolosy

+0

True, true ... Можете ли вы попробовать использовать локальную переменную вместо переменной класса? – Rob