0

私はレールで印刷している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:):

私はウグイスを使用してこれを戦争にまとめ、WindowsのTomcatディレクトリにドロップしました。

何が与えますか?

編集- モア情報

問題は環境設定であることが判明しました。warbler のデフォルトは、dev ではなく「production」です。ただし、なぜこのように動作したのかはまだわかりません。

詳細 - これは、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 doc に記述されているこの変数を確認できません。おそらく、それは正式なパブリック API の一部ではありませんか?

jruby と rails のどのバージョンを実行していますか? Windows XP で jruby 1.5.1 を実行しています。

于 2010-09-13T04:45:22.097 に答える