2017-02-17 7 views
0

Ошибка говорит:Не удается найти DBI.pm в @INC не может разрешить

Can't locate DBI.pm in @INC (@INC contains 
    /etc/perl 
    /usr/local/lib/perl/5.14.2 
    /usr/local/share/perl/5.14.2 
    /usr/lib/perl5 
    /usr/share/perl5 
    /usr/lib/perl/5.14 
    /usr/share/perl/5.14 
    /usr/local/lib/site_perl .) at /usr/lib/cgi-bin/helloworld.pl line 7. 

Но я уже добавил путь моего модуля в переменной окружения с помощью

export PERL5LIB=/home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int 

Когда я проверяется с помощью perl -V он включен уже видим следующее:

%ENV: 
    PERL5LIB="/home/vagrant/perl5/lib/perl5" 
    PERL_LOCAL_LIB_ROOT="/home/vagrant/perl5" 
    PERL_MB_OPT="--install_base "/home/vagrant/perl5"" 
    PERL_MM_OPT="INSTALL_BASE=/home/vagrant/perl5" 
    @INC: 
    /home/vagrant/perl5/lib/perl5/5.14.2/i686-linux-gnu-thread-multi-64int 
    /home/vagrant/perl5/lib/perl5/5.14.2 
    /home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int <--- My module 
    /home/vagrant/perl5/lib/perl5 
    /etc/perl 
    /usr/local/lib/perl/5.14.2 
    /usr/local/share/perl/5.14.2 
    /usr/lib/perl5 
    /usr/share/perl5 
    /usr/lib/perl/5.14 
    /usr/share/perl/5.14 
    /usr/local/lib/site_perl 

Моя машина Ubuntu 16.04.2 LTS

Ваша помощь очень ценится, спасибо вам, ребята!

+0

У вас работает другая копия perl, когда вы проверяете свой код с того, с которым вы работаете с 'perl -V'. Как вы тестируете свой код? Что означает '-a perl'? Что находится в строке shebang вашей программы? – Borodin

+0

Действительно ли вы установили модуль DBI? –

+0

Я тестировал его через http-запрос в браузере, результат 'which -a perl''/usr/bin/perl', см. Мой тестовый код: #!/Usr/bin/perl print "Content-type: text \ html \ n \ n "; использовать строгое; использовать предупреждения; использовать DBI; печать «Hello World \ n»; – Ron

ответ

0

См. Документацию для 'use lib' here и 'perl run' here и переменные окружения Ubuntu here.

Я подозреваю, что вы используете сценарий из разных сред. Ваше приглашение оболочки - это другая среда, из которой будет использоваться сервер httpd, что также отличается от того, что будет использовать программа cron. Когда вы добавляете переменную окружения в свою среду, это только в вашей среде (и часто только это экземпляр вашей среды), а не другие. Эти другие приложения не могут видеть или читать переменные среды.

Я предполагаю, что здесь, как вы не предоставили какой-либо код, который нужно добавить следующие строки в ваш сценарий, как раз перед «использовать DBI» может помочь вам:

use lib "/home/vagrant/perl5/lib/perl5"; 
use lib "/home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int"; 

Я говорю может, потому что, как указал великий икегами, если эта отдельная среда приложений не имеет доступа к вашим каталогам, то она не добавит эти папки в список @INC. В первом разделе вывода, который вы опубликовали, ясно показано, что ваши домашние папки отсутствуют в списке.