كيف يمكنني الوصول إلى تكوين الملقم أباتشي في BEGIN كتلة في mod_perl؟
سؤال
ولقد كنت تحاول التحول من استخدام 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
. يجب أن تعمل نفس. قد يكون أن يساعد.