問題タブ [catalyst]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 多重継承を持つ DBIx::Class が更新時に失敗するのはなぜですか?
すべてのクラスが共通の基本クラスと定義クラスを使用する DBIC スキーマがあります。基本クラスは共通コンポーネントをロードし、変更セットを監査テーブルに記録するために update メソッドをオーバーライドします。定義クラスは、データベースから生成される静的クラスです。典型的なクラス ヘッダーは次のようになります。
User クラスの更新にオーバーライドを追加するまで、すべてが正常に機能していました。どうやら基本クラスにオーバーライドがあり、 User クラスが何らかの形で競合しています。next::method(@_) を使用して次の更新メソッドを呼び出していますが、常にハングします。
これは CGI アプリケーションです。したがって、「保存」を押すと、エスケープを押してリクエストをキャンセルするまで、ブラウザがホイールを回転させます。この時点で、私のロギングは元に戻り、すべてのクエリが正しく迅速に実行されていることを示していますが、User クラスの最後でハングし、ブラウザーでエスケープを押すまで進行しません。
更新:これは、触媒との相互作用に問題があるようです。単独で実行すると、このコードは正しく機能します。ただし、Catalyst アプリケーション内から実行すると失敗します。
perl - Catalystを起動すると、なぜ多くのMoose警告が表示されるのですか?
どうやらMoose/Class :: MOPに問題があります(Catalyst関連)。サーバーを起動すると、次の出力が得られます...(以下にすべての栄光を示しています)
ロールアプリケーションのaliasおよびexcludesオプションの名前が-aliasおよび-excludesに変更されました。/usr/local/lib/perl/5.10.1/Moose/Meta/Role/Application.pmの26行目Moose::Meta :: Role :: Application :: new('Moose :: Meta :: Role :: Application :: ToRole'、'excludes'、'ARRAY(0x9645568)')は/usr/local/lib/perl/5.10.1/Moose/Metaで呼び出されます/Role.pm行416Moose:: Meta :: Role :: apply('Moose :: Meta :: Role = HASH(0x95b3368)'、'Moose :: Meta :: Role = HASH(0x9446d90)'、'除外' 、'ARRAY(0x9645568)')/usr/local/lib/perl/5.10.1/Moose/Util.pm行133で呼び出されましたMoose :: Util :: _ apply_all_roles('Moose :: Meta :: Role = HASH(0x9446d90 )'、undef、' MooseX :: Getopt'、' HASH(0x9454a08)')/usr/local/lib/perl/5.10.1/Moose/Util.pm行87 Moose :: Util :: apply_all_roles(' Moose :: Meta ::Role = HASH(0x9446d90)'、' MooseX :: Getopt'、' HASH(0x9454a08)')/usr/local/lib/perl/5.10.1/Moose/Role.pm行26 Moose :: Role :: with('Moose :: Meta :: Role = HASH(0x9446d90)'、'MooseX :: Getopt'、'HASH(0x9454a08)')は/usr/local/lib/perl/5.10.1/Moose/Exporterで呼び出されます。 pm行294Moose:: Role :: with('MooseX :: Getopt'、'HASH(0x9454a08)')は/usr/share/perl5/Catalyst/ScriptRole.pmで呼び出されます8行目はCatalyst/ScriptRole.pmが/で呼び出される必要がありますusr / local / lib / perl / 5.10.1 / Class/MOP.pm行113Class:: MOP :: __ ANON __()は/usr/share/perl5/Try/Tiny.pm行71eval{...}で呼び出されます/usr/share/perl5/Try/Tiny.pm行67で呼び出されますTry::Tiny :: try('CODE(0x93c2910)'、'Try :: Tiny :: Catch = REF(0x93bba38)')/usrで呼び出されます/local/lib/perl/5.10.1/Class/MOP.pm行124Class:: MOP ::load_first_existing_class('Catalyst :: ScriptRole')は/usr/local/lib/perl/5.10.1/Class/MOP.pm行136で呼び出されますClass :: MOP :: load_class('Catalyst :: ScriptRole'、undef)はで呼び出されます/usr/local/lib/perl/5.10.1/Moose/Util.pm行109Moose:: Util :: _ apply_all_roles('Moose :: Meta :: Class = HASH(0x8fc9378)'、undef、'Catalyst :: ScriptRole ')/usr/local/lib/perl/5.10.1/Moose/Util.pm行87で呼び出されますMoose :: Util :: apply_all_roles(' Moose :: Meta :: Class = HASH(0x8fc9378)'、'カタログ: :ScriptRole')/usr/local/lib/perl/5.10.1/Moose.pmの58行目で呼び出されますMoose :: with(' Moose :: Meta :: Class = HASH(0x8fc9378)'、' Catalyst :: ScriptRole ' )/usr/local/lib/perl/5.10.1/Moose/Exporter.pmで呼び出されます。294行目Moose :: with('Catalyst :: ScriptRole')は/usr/share/perl5/Catalyst/Script/Serverで呼び出されます。pm行14には、/ usr / local / lib / perl / 5.10.1 / Class/MOP.pm行113で呼び出されるCatalyst/Script/Server.pmが必要です。 /Try/Tiny.pm行71eval{...}は/usr/share/perl5/Try/Tiny.pm行67で呼び出されますTry::Tiny :: try('CODE(0x8f6dc38)'、'Try :: Tiny :: Catch = REF(0x8f8d1c8)')/usr/local/lib/perl/5.10.1/Class/MOP.pm行124で呼び出されますClass :: MOP :: load_first_existing_class('Catalyst :: Script :: Server') /usr/local/lib/perl/5.10.1/Class/MOP.pmの136行目で呼び出されますClass::MOP :: load_class('Catalyst :: Script :: Server')/ usr / share / perl5/Catalystで呼び出されます/ScriptRunner.pm行18Catalyst:: ScriptRunner :: run('Catalyst :: ScriptRunner'、'Jamaica'、'Server')script/boca_server.pl行8で呼び出されます古いMoose::Util :: MetaRole API(以前バージョン0。94)/usr/local/lib/perl/5.10.1/Moose/Util/MetaRole.pm行16で非推奨になりましたMoose :: Util :: MetaRole :: apply_metaclass_roles('for_class'、'Catalyst :: Controller'、 'metaclass_roles'、'ARRAY(0x97bdff8)'、'method_metaclass_roles'、'ARRAY(0x97ab9f0)'、'wrapped_method_metaclass_roles'、'ARRAY(0x981d650)')/usr/share/perl5/MooseX/MethodAttributes.pm行32で呼び出されます:: MethodAttributes :: init_meta('MooseX :: MethodAttributes'、'for_class'、'Catalyst :: Controller'、'metaclass'、undef)は/usr/local/lib/perl/5.10.1/Moose/Exporterで呼び出されます。 pm行355Moose:: Exporter :: __ ANON __('MooseX :: MethodAttributes')は/usr/share/perl5/Catalyst/Controller.pm行10 Catalyst :: Controller::で呼び出されますBEGIN()は/usr/share/perl5/Catalyst/Controller.pmの10行目で呼び出されますeval{...}は/usr/share/perl5/Catalyst/Controller.pmで呼び出されます10行目はCatalyst/Controller.pmが/で呼び出される必要がありますusr / share / perl5/Catalyst.pm行16Catalyst:: BEGIN()は/usr/share/perl5/Catalyst/Controller.pm行10eval{...}で呼び出されます/usr/ share / perl5 /Catalyst/で呼び出されますController.pmの10行目は/home/bobek/dev/build_7.2/mvc/Jamaica/script/../lib/Jamaica.pmで呼び出されるCatalyst.pmが必要です。17行目Jamaica::BEGIN()は/ usr/shareで呼び出されます/perl5/Catalyst/Controller.pm行10eval{...}は/usr/share/perl5/Catalyst/Controller.pmで呼び出されます行10は/usr/local/lib/perl/5.10.1で呼び出されるJamaica.pmを必要とします/Class/MOP.pm行113Class:: MOP :: __ ANON __()は/usr/share/perl5/Try/Tiny.pm行71eval{...}で呼び出されます/usr/ share / perl5 /Try/で呼び出されますTiny.pm行67試してみてください::Tiny :: try('CODE(0x8fb3230)'、'Try :: Tiny :: Catch = REF(0x969fee0)')は/usr/local/lib/perl/5.10.1/Class/MOP.pmの124行目で呼び出されますクラス:: MOP :: load_first_existing_class('Jamaica')は/usr/local/lib/perl/5.10.1/Class/MOP.pmで呼び出されます136行目Class :: MOP :: load_class('Jamaica')は/usr/で呼び出されますshare / perl5 / Catalyst/ScriptRole.pm行61Catalyst:: ScriptRole :: _ run_application('Catalyst :: Script :: Server = HASH(0x969d748)')は/usr/share/perl5/Catalyst/Script/Server.pmで呼び出されます181行目Catalyst::Script :: Server :: run('Catalyst :: Script :: Server = HASH(0x969d748)')は/usr/local/lib/perl/5.10.1/Class/MOP/Method/Wrappedで呼び出されます.pm48行目Class::MOP :: Method :: Wrapped :: __ ANON __('Catalyst :: Script :: Server = HASH(0x969d748)')は/usr/local/lib/perl/5.10.1/Class/で呼び出されますMOP / Method /Wrapped.pm89行目Catalyst::Script :: Server :: run('Catalyst :: Script :: Server = HASH(0x969d748)')は/usr/share/perl5/Catalyst/ScriptRunner.pmの20行目で呼び出されますCatalyst :: ScriptRunner :: run('Catalyst: :ScriptRunner'、' Jamaica'、' Server')script/boca_server.plの8行目で呼び出されます
私はCatalystを初めて使用します(そして私はそれが好きです、私はそれをうまく起動して実行したいだけです)。私はMooseとClass::MOPの最新バージョンをチェックしましたが、それらは最新です(CPANに関する限り)。
うまくいけば、ムースに精通している誰かがこれを以前に見たことがあるでしょう。任意の提案やチェックを開始する場所をいただければ幸いです。
ミシェルB。
perl - Catalyst の構成ファイルを介してアクションを無効にするにはどうすればよいですか?
チェーンを使用して設定されたアクションを持つコントローラーがあります。チェーンされたルート アクションがルート コントローラにあり、「セクション」コントローラには、ルート コントローラの「ルート」アクションからチェーンされた「ルート」アクションがあります。次に、同じクラスの「ルート」アクションから連鎖する「セクション」コントローラー クラスにエンドポイント アクションを設定します。
構成ファイルを介して「セクション」パッケージ内のすべてのアクションを無効にするにはどうすればよいですか? これまでに行ったことは、セクション クラス Private の「ルート」アクションを作成することであり、それは機能しているように見えますが、ナビゲーションでビルドするときにセクションが利用できないことをどのように伝えることができますか? uri_for_action を試すと undef が返されますが、これは少し面倒で、Catalyst がアクションの uri_for を見つけられないという警告が表示されます。
perl - Config :: Generalを使用して、特定のコントローラーですべてのCatalystアクションを構成するにはどうすればよいですか?
アプリの構成ファイルを使用して、コントローラーのすべてのアクションを構成したいと思います。Catalyst :: Controllerによると、これはコントローラー自体で実行できます。
だから私は私の設定でこれを試しました:
しかし、起動時に次のエラーが発生します。
アスタリスクの前後に引用符がなくても同じことを行います。これはどのようにすればよいですか?
perl - Catalyst :: Model::Adaptorのprepare_argumentsで実際のアプリにアクセスする方法
Catalyst :: Model :: Adapterを使用してラップすることで、インスタンス化したいCatalyst固有のモデルクラスがあります。
問題は、ここで$ appがMyAPPのインスタンスではなく、クラス名'MyApp'だけであるということです。
このメソッドからMyAppのインスタンスにアクセスするにはどうすればよいですか?
perl - Catalyst の DBIx::Class::Schema モデルの Moose メソッド修飾子
任意の結果クラス MySchema::Result::Foo (Moose/MooseX::nonmoose を使用するデフォルトのスキーマ ローダー生成構文から構築)
BUILDARGS メソッド ラッパーを追加して、行のコンストラクター データを次のようにサニタイズすると、次のようになります。
スキーマを直接使用する場合に機能します。たとえば、次は期待どおりに動作します: ->new が呼び出される前に、real_column=>'value' と not_a_real_column が削除された新しい行オブジェクトが作成されます。
ただし、Catalyst::Model::DBIC::Schema を介して同じスキーマを使用する場合、順序は異なります。not_a_real_column が無効であるため、新しい Foo 行オブジェクトを作成しようとすると、次のように失敗します。つまり、new への引数は、->new が呼び出される前に BUILDARGS を介して実行されません。
興味深いことに、'BUILDARGS' => sub{} の代わりに 'new' => sub{} をラップすると、動作はどちらの場合も同じで、正常に動作しますが、Moose のドグマでは決して混乱しないように述べられています。新着。
なぜこれが当てはまるのか、またはより良い方法があるかどうかを理解するのを手伝ってくれる人はいますか?
perl - Perl の Catalyst でディスパッチ ルールをカスタマイズするには?
URL の照合時に Catalyst が使用しているディスパッチ ルールをどのようにカスタマイズしますか?
GET /home/a
たとえば、を呼び出して を呼び出したいsub a_GET : Local
とPOST /home/a
しますsub a_POST : Local
。
名前に基づいてこれらの関数のいずれかを呼び出す共通のアクションをいつでも作成できることは知っていますが、より一般的なオプションについて知りたいです。
perl - Openid - 認証後のユーザー詳細
Catalyst::Authentication::Credential::OpenIDを使用して、Google からユーザーを認証しようとしています。認証が成功すると、ユーザーとしてCatalyst::Plugin::Authentication::User::Hashオブジェクトを取得します。ユーザーがアプリケーションに初めてログインする場合、OpenID プロバイダーからユーザーの詳細を取得し、DB に保存したいと考えています。これは、登録プロセスを容易にするためです。できるだけ OpenID から詳細を取得したいと考えています。しかし、少なくとも名、姓、電子メールなど..
しかし、私はそれを達成することができません。例として、呼び出すと、メソッド *url,display * が定義されていないという例外が発生します。
それを整理するための助けは役に立ちます。
perl - Catalyst コントローラでオプションの URL 引数を処理する最良の方法は何ですか?
例えば:
www.domain.com/foo/21と一致させる方法を知っています
しかし、どうすればwww.domain.com/foo/21 OR www.domain.com/foo/21/bar/56に一致させることができますか?
ありがとう
更新: Daxim の提案に従って、:Regex を使用しようとしました
しかし、これはうまくいかないようです。URL は一致しますが、$bar_id は常に undef です。正規表現の末尾からオプションの演算子を削除すると、$bar_id が正しくキャプチャされますが、url の一致を取得するには foo と bar の両方が存在する必要があります。これが perl regex の問題なのか、Catalyst の問題なのかはわかりません。何か案は?
アップデート:
Daxim が指摘しているように、これは正規表現の問題です。上記の正規表現が機能しない理由はわかりませんが、機能するものを見つけることができました:
(IDが数値ではない可能性があるため、Daximのようにキャプチャで\ d +を使用しませんでした)
ヘルプと提案に感謝します。Catalyst での URL の処理について多くのことを学びました:D