Сценарии Perl CGI не могут найти модули в библиотеке - PullRequest
5 голосов
/ 26 января 2011

У меня проблема с Apache / Perl.

Я использую модуль CPAN в своем приложении perl CGI. Это электронная таблица :: ParseExcel

Я установил модуль cpan с файлами tar.gz.

Я установил зависимости.

Однако я сделал это не как пользователь root. Библиотека, которая содержит эти файлы, находится в папке пользователя, / home / user / lib

Теперь я успешно настроил Apache2 на этом поле. Каталог html - это / var / www / html, а папка cgi - / var / www / html / cgi-bin. Я убедился, что они работают, потому что все скрипты в этой папке, которые не требуют специальных модулей, работают в моем браузере Firefox, т.е. Привет, мир, дампы данных, простые формы.

Однако, когда я пытаюсь запустить сценарии, которые используют «Spreadsheet :: ParseExcel», я получаю сообщение об ошибке, что модуль не может быть найден в @INC. Однако в начале скрипта у меня есть оператор use lib, который добавляет библиотеку.

Скрипты могут быть запущены в PUTTY без проблем. Проблема возникает только при запуске скрипта из браузера.

Это веб-приложение было написано на другой коробке и прекрасно работает на этой коробке. Потому что я разработал там, конечно. Я установил Apache2 на свой персональный компьютер с Ubuntu, установил здесь веб-приложение и модули, и он работает на моем локальном компьютере.

Я установил "chmod -R a + rx" в папку пользовательской библиотеки, поэтому я думаю, что Apache имеет доступ к папке, если только настройки родительского каталога не блокируют ее? Мне не нужно запускать это в папке / home / user или, что еще хуже, в папке / home, не так ли?

Есть идеи по этому вопросу?

Спасибо всем за потраченное время!

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Пользователь Apache не может получить доступ к / home / user / lib, если у него нет доступа к / home / user, даже если разрешения для / home / user / lib позволят ему получить к нему доступ.

Например, если у вас есть файл в / root, вы все равно не сможете получить к нему доступ, если у вас нет доступа к /root.

1 голос
/ 26 января 2011

Две мысли здесь:

  1. Что такое @INC в сообщении об отсутствующих модулях, включает ли он путь, добавленный вами через use lib?
  2. Имеет ли пользователь, на котором работает Apache, доступ к этому каталогу? Довольно часто домашние каталоги имеют разрешения, которые запрещают обход другими учетными записями. Проверьте права доступа к каталогу модуля до конца, убедитесь, что o имеет как минимум значение r-x для всех каталогов и файлов вашего модуля.
...