Как я игнорирую хижину Perl в Windows с Apache 2?

Я настроил локальную веб-среду Perl на своей машине Windows. Приложение я продолжаю работать, родом из сервера Linux, и таким образом, хижина для источника .pl файлы похожи так:

#!/usr/bin/perl

Это вызывает следующую ошибку в моем Windows dev машина:

(OS 2)The system cannot find the file specified.

Действительно ли возможно изменить мой Apache 2 conf так, чтобы хижина была проигнорирована на моей машине Windows? Конечно, я мог установить хижину на #!c:\perl\bin\perl.exe, то, что много очевидно; но проблема возникает у развертывания обновленных файлов. Очевидно это было бы очень неудобно для возврата, это на каждом развертывается. Я использую ActivePerl в Windows 7.

Обновление:

Я должен был упомянуть, что должен сохранить хижину так, чтобы сценарии продолжили работать наш общий хостинг рабочий сервер Linux. Если бы у меня не было этого ограничения, и я не должен был использовать хижину, то очевидный ответ не должен был бы просто использовать его.

11
задан Nick Bolton 11 January 2010 в 17:27
поделиться

5 ответов

я использую #!/usr/bin/perl в моих сценариях и настраиваю Apache в Windows для игнорирования строки хижины. Добавить

 ScriptInterpreterSource Registry-Strict

к вашему httpd.conf и настроить Windows Registry key, как объяснено в , документы .

Apache Здесь - то, что я получаю, когда я экспортирую ключ:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
@="c:\\opt\\perl\\bin\\perl.exe"

я использовал эту установку с Apache и ActiveState Perl на моем ноутбуке Windows и Apache и дистрибутивами Perl, которые идут с ArchLinux на моем сервере.

документы Apache (на который я сослался выше), состояние:

опция Registry-Strict, которая является новой в Apache 2.0, делает то же самое как Реестр, но использует только подраздел Shell\ExecCGI\Command. ключ ExecCGI не является общим. Это должно быть настроено вручную в реестре окон и следовательно предотвращает случайную программу, обращается к вашей системе . (шахта акцента)

12
ответ дан 3 December 2019 в 05:34
поделиться

Нет переносимой строки сдвига. Даже на одной и той же платформе и на одной и той же архитектуре, кто-то мог установить perl в другом месте.

Хитрость в том, чтобы не устанавливать модули и скрипты вручную. Когда вы упаковываете все как дистрибутивы и используете цепочку инструментов модулей, строки shebang автоматически изменяются, указывая на perl, который вы использовали для установки всего. Вам не нужно думать об этих деталях. :)

.
4
ответ дан 3 December 2019 в 05:34
поделиться

Я использую # !/usr/bin/perl в своих сценариях и настраиваю Apache в Windows для игнорирования строки shebang. Добавьте

 ScriptInterpreterSource Registry-Strict

в httpd.conf и настройте раздел реестра Windows, как описано в документах Apache .

Вот что я получаю при экспорте ключа:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
@="c:\\opt\\perl\\bin\\perl.exe"

Я использовал эту установку с Apache и ActiveState Perl на моем ноутбуке Windows и дистрибутивами Apache и Perl, которые поставляются с ArchLinux на моем сервере.

Документы Apache (на которые я ссылался выше) указывают:

Новый параметр Registry-Strict в Apache 2,0 выполняет те же действия, что и Registry, но использует только подраздел Shell\ExecCGI\Command . Ключ ExecCGI не является общим. Его необходимо настроить вручную в реестре Windows и, следовательно, предотвратить случайные вызовы программ в системе . (акцент мой)

-121--2943707-

Я так не думаю: основная особенность последовательностей заключается в том, что возможны разрывы (подумайте о двух параллельных транзакциях, одна из которых выполняет ROLLBACK). Следует игнорировать пробелы. Почему они являются проблемой в вашем случае?

-121--4126645-

У меня нет удобной Windows, но perlcritic говорит:

my $desc = q{Found platform-specific perl shebang line};
my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};

Итак, я думаю #! perl должен работать.

Edit: не работает на linux; видимо, работает в попугай , хотя я не вижу, как они справляются с этим.

0
ответ дан 3 December 2019 в 05:34
поделиться

Мне пришлось скопировать perl.exe в c:/usr/bin/ и переименовать его в perl (убрать .exe)

.
1
ответ дан 3 December 2019 в 05:34
поделиться

Я использую # ! / usr / bin / env perl как шебанг для всего моего Perl, будь то * nix или Windows. Windows просто игнорирует это, а Unixen следует env к выбранному perl disto.

3
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: