2013-11-01 2 views
0

Таким образом, для конкретного CGI PERL скрипт я включил JSON как это обрабатывать некоторые .json файлы:Не может включать в себя модуль JSON :: XS локально в CGI PERL скрипт, но может включать в себя модуль JSON

use lib "./modules/JSON/lib"; 
use JSON; 

Это работает отлично и хорошо. В веб-каталоге хранятся файлы, необходимые в папке модулей.

Однако модуль JSON работает очень медленно. Я прочитал, что JSON: XS может быть много, гораздо быстрее, но я не могу показаться, чтобы просто использовать его в качестве так:

use lib "./modules/JSON-XS"; 
use JSON::XS; 

Там нет Lib папки в файлах JSON-XS, я пробовал комбинацию (т. е. использовать обе папки и т. д.), но это не сработало.

И нет, я не могу просто установить модуль для этого конкретного проекта.

Любая помощь приветствуется.

+0

Я попытался установить с помощью makefile. Необходимы две зависимости: 'common :: sense' и' Types :: Serialiser' (prereq для типов :: Serialiser - 'common :: sense'). Я устанавливаю общий: смысл тонкий, и он прошел тест, но «Типы :: Сериализатор» говорит: ** Предупреждение: предварительное условие common :: sense 0 не найдено. ** – Mohammad

+0

Хорошо, используя: 'perl Makefile.PL PREFIX =/path/to/modules LIB =/path/to/modules' Мне удалось установить все модули успешно и передать «make test», но я не уверен, как их использовать в моем скрипте. – Mohammad

ответ

0

Хорошо это, наконец, работал для меня:

Я сделал этот процесс для всех зависимостей (в порядке, не зависимых от более зависимостей)

export PERL5LIB = ~/path/to/modules/perl5 
perl Makefile.PL PREFIX=$PERL5LIB LIB=$PERL5LIB 
make 
make test 
make install 

Это Устанавливаются все модули в каталог, я назвал perl5. Это также означает, что при попытке установить другие модули локально проблема с зависимостями не возникает из-за добавлений PREFIX/LIB.

Тогда все, что я сделал добавить это к моему PERL CGI скрипт:

use lib "./modules/perl5"; 
use JSON::XS; 

PS: JSON :: XS намного быстрее!

: D

2

И нет, я не могу просто установить модуль для этого конкретного проекта.

Вы не можете использовать модуль, не устанавливая его. Ты только что ушел, выполняя половину своей работы. Однако это не сработает для JSON :: XS. Причина, по которой это быстро, состоит в том, что она написана на C, поэтому вам нужно скомпилировать код C. Самый простой способ сделать это - использовать предоставленный установщик, а не изобретать колесо.

(Вы знаете, что вы можете установить модуль в любой каталог, и что это не требует специальных разрешений, верно?)

распределения
+0

Кажется, я просто использовал JSON без установки его, прежде чем работал, но это плохая привычка. Я попытался установить его, но у меня все еще возникают проблемы. CGI-среда создает ошибку 500, когда я использую JSON :: XS; – Mohammad

+0

Начните с выяснения, какая ошибка вызвала 500. Ваш веб-сервер должен быть настроен таким образом, чтобы помещать его в файл журнала. – ikegami

1

Perl, как правило, использовать в неустановленного состоянии. Вам просто нужно позвонить perl Makefile.PL && make (или для Module::Build на основе распространения: perl Build.PL && ./Build). Это сделает все необходимые компиляции (если это модуль XS) и скопирует файлы библиотеки в подкаталог blib. В вашем скрипте вместо use lib можно было бы написать use blib:

use blib "/path/to/JSON-XS"; 

Обратите внимание, что если модуль имеет зависимости, то вы должны решить сами, и добавить, что многие use blib заявления. JSON::XS не имеет таких зависимостей, но для других модулей это будет действительно неудобно. В этом случае вы, вероятно, должны искать другое решение, например. используя CPAN.pm вместе с local::lib.

+0

Спасибо за этот ответ, я создал make-файл, используя perl, а затем использовал make. Это создало все библиотеки. Однако я все еще не могу его использовать. Среда cgi создает ошибку 500. – Mohammad

+0

Я также использовал все зависимости: использование blib "./modules/common-sense-3.72"; использование blib "./modules/Types-Serialiser-0.03"; использование blib "./modules/JSON-XS-3.01"; использование common :: sense; Использование Типы :: Serialiser; использование JSON :: XS; – Mohammad

Смежные вопросы