كيف يمكنني الوصول إلى تكوين الملقم أباتشي في BEGIN كتلة في mod_perl؟

StackOverflow https://stackoverflow.com/questions/462824

سؤال

ولقد كنت تحاول التحول من استخدام PerlSetEnv لاستخدام مخصصة توجيهات التكوين . لدي وحدة التكوين بلدي مع نسخة من set_val من المستندات:

sub set_val
{
    local our ($key, $self, $parms, $arg) = @_;
    $self->{$key} = $arg;
    unless ($parms->path)
    {
        local our $srv_cfg = Apache2::Module::get_config($self, $parms->server);
        $srv_cfg->{$key} = $arg;
    }
}

... وهو ما يسمى من قبل كل الفرعية التوجيه المخصصة. ثم لا بد لي في بلدي .conf:

PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'

وهذا يعمل بشكل جيد في هذا هتبد -t الموافقات جملة الملف. المشكلة هي أنني لا يمكن أن يبدو للحصول على القيمة من ملف التكوين من داخل BEGIN كتلة، التي يجب أن أفعل.

ولقد حاول ترقيع مع جميع أنواع الأشياء:

BEGIN
{
    use Apache2::CmdParms ();
#   use Apache2::Directive ();
    use Apache2::Module ();
#   use Apache2::ServerUtil ();
#   use Apache2::RequestUtil ();

    use Data::Dump;
    warn ddx(Apache2::Module::get_config('MyModule::ServerConfig', Apache2::CmdParms->server));
#   warn ddx(Apache2::Directive->as_hash);
#   warn Apache2::ServerUtil->dir_config('MyCustomDirective);
#   warn Apache2::CmdParms->server->server_hostname();
}

... ولكن دون جدوى. معظم جهودي (تحاول الوصول إلى CmdParms->server على سبيل المثال) يؤدي إلى Parent: child process exited with status 3221225477 -- Restarting وإعادة التشغيل التلقائي من طراز أباتشي كما يقول. إذا مررت ServerUtil->server to get_config()، الملقم يبقى على قيد الحياة ولكن التحذير طباعة فقط من "1".

وقرأت في مكان ما أن هذا هو لأنه لا يمكنك الحصول على أي شيء طلب ذات الصلة داخل كتلة BEGIN، لأن طلبات تختلف. انها نوع من المنطقي، إلا أنه مع PerlOptions + GlobalRequest لقد كنت قادرا على رؤية $ENV داخل كتلة BEGIN، لذلك لماذا لا تكون كنت قادرا على رؤية التوجيهات الخاصة، فقط تعتمد بقدر ما هي في كيفية حدوث هذا الطلب؟ مربكة خاصة هو أنه إذا كنت تحاول تمرير Apache2::RequestUtil->request->per\_dir\_config() إلى get_config()، فإنه يقول Global $r object is not available. اذا كان هذا صحيحا في كتلة BEGIN، كيف يمكنني الحصول على $ENV؟

هل كانت مفيدة؟

المحلول 2

وجزئيا، لا تستخدم تفريغ بشكل صحيح. هذا يعمل بشكل أفضل:

use Data::Dump qw(pp);
warn pp(Apache2::Module::get_config('MyModule::ServerConfig', Apache2::ServerUtil->server));

ومع ذلك، فإنه لا تظهر أية توجيهات التي تظهر ضمن <دليل> كتل.

في حالتي خاصة، على الرغم من أنني لا تحتاج هذه الوظيفة، على الفكرة الثانية. ما يحدث لمجرد أن يكون حيث كنت قد ألصقتها.

نصائح أخرى

وحاول إضافة ما تريد import وظيفة إلى وحدة أخرى وuse هذه الوحدة في الكود في المكان الذي عادة وضع كتلة BEGIN. يجب أن تعمل نفس. قد يكون أن يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top