You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by mehryar <me...@mehryar.com> on 2016/12/08 22:17:58 UTC

use lib error

Hi folks,

A noobie question here:

I have a plain simple cgi script in a directory configured for 
Modperl::Registry:

--------------------
#!/usr/local/bin/perl
use strict;
use warnings

use lib '../lib';
use MyApp;

print "Content-type: text/html\n\n";
print "hello\n";
---------------------

This script runs correctly under mod_cgi (without mod_perl), implying that 
perl is able to locate MyApp.pm through use lib '../lib';

Now under mod_perl with PerlSwitches -I/Users/mehryar/Sites/lib
the script runs correctly as well - but only if I comment out the
'use lib...' line. Implying again that mod_perl was able to locate MyApp.pm 
through the -I/Users/mehryar/Sites/lib.

But what I don't understand is why it fails if the use lib '../lib'; line
is present in the script?
I get the following error:
Can't locate MyApp.pm:   Permission denied at /Users/mehryar/Sites/cgi/test.cgi
(This is on my Mac mod_perl2.0.10/Apache2.4.23)

Reading the docs on how @INC is modified is getting me nowhere.

cheers,
-Mehryar

Re: use lib error

Posted by mehryar <me...@mehryar.com>.
Thanks Adam, I think you were right.
There was a small difference in the simplified example I wrote below to 
the actual script I was running. The actual script actually had the path:
use lib '../../lib'; # which was correct relative to the script.
But when I switched this to:
use lib '../lib'; # this did not cause the error anymore, even though the 
path was incorrect relative to the script.

And I think what was happening was that you're right the current working
directory was being set to /  and ../../lib was an invalid path somehow.

Anyway I adopted your solution and just removed the use libs in my scripts
since the PerlSwitch -I/{full path to lib} allows the modules to be found.

cheers,
Mehryar


On Thu, 8 Dec 2016, Adam Prime wrote:

>
> I don't think Modperl::Registry sets the current working directory of of
> the process when it runs your script, so that might be why it's having
> problems. You can try RegistryPrefork instead, if you're running under
> the prefork MPM.  If not, then your script will need to be updated to
> assumed that the current working directory is /
>
> I could of course be wrong, but this is something to try at least.
>
> Adam
>
> On 12/08/2016 05:17 PM, mehryar wrote:
>> Hi folks,
>>
>> A noobie question here:
>>
>> I have a plain simple cgi script in a directory configured for
>> Modperl::Registry:
>>
>> --------------------
>> #!/usr/local/bin/perl
>> use strict;
>> use warnings
>>
>> use lib '../lib';
>> use MyApp;
>>
>> print "Content-type: text/html\n\n";
>> print "hello\n";
>> ---------------------
>>
>> This script runs correctly under mod_cgi (without mod_perl), implying
>> that perl is able to locate MyApp.pm through use lib '../lib';
>>
>> Now under mod_perl with PerlSwitches -I/Users/mehryar/Sites/lib
>> the script runs correctly as well - but only if I comment out the
>> 'use lib...' line. Implying again that mod_perl was able to locate
>> MyApp.pm through the -I/Users/mehryar/Sites/lib.
>>
>> But what I don't understand is why it fails if the use lib '../lib'; line
>> is present in the script?
>> I get the following error:
>> Can't locate MyApp.pm:   Permission denied at
>> /Users/mehryar/Sites/cgi/test.cgi
>> (This is on my Mac mod_perl2.0.10/Apache2.4.23)
>>
>> Reading the docs on how @INC is modified is getting me nowhere.
>>
>> cheers,
>> -Mehryar
>
>

Re: use lib error

Posted by Adam Prime <ad...@utoronto.ca>.
I don't think Modperl::Registry sets the current working directory of of
the process when it runs your script, so that might be why it's having
problems. You can try RegistryPrefork instead, if you're running under
the prefork MPM.  If not, then your script will need to be updated to
assumed that the current working directory is /

I could of course be wrong, but this is something to try at least.

Adam

On 12/08/2016 05:17 PM, mehryar wrote:
> Hi folks,
>
> A noobie question here:
>
> I have a plain simple cgi script in a directory configured for
> Modperl::Registry:
>
> --------------------
> #!/usr/local/bin/perl
> use strict;
> use warnings
>
> use lib '../lib';
> use MyApp;
>
> print "Content-type: text/html\n\n";
> print "hello\n";
> ---------------------
>
> This script runs correctly under mod_cgi (without mod_perl), implying
> that perl is able to locate MyApp.pm through use lib '../lib';
>
> Now under mod_perl with PerlSwitches -I/Users/mehryar/Sites/lib
> the script runs correctly as well - but only if I comment out the
> 'use lib...' line. Implying again that mod_perl was able to locate
> MyApp.pm through the -I/Users/mehryar/Sites/lib.
>
> But what I don't understand is why it fails if the use lib '../lib'; line
> is present in the script?
> I get the following error:
> Can't locate MyApp.pm:   Permission denied at
> /Users/mehryar/Sites/cgi/test.cgi
> (This is on my Mac mod_perl2.0.10/Apache2.4.23)
>
> Reading the docs on how @INC is modified is getting me nowhere.
>
> cheers,
> -Mehryar