У меня есть задача Symfony, которая генерирует некоторые вызовы exec exec в jar, а затем анализирует вывод. Консоль отлично работает из командной строки, задача отлично работает из командной строки.
Проблема:
Я вызываю задачу в действии, основанном на представлении формы. У меня есть действие, запускающее новый php-процесс в фоновом режиме для запуска задачи, независимо от того, какая страница она породила.
Когда он переходит к вызову java, скажем exec (java -version); он выводит это:
Error occurred during initialization of VM
Unable to load native library: libjava.jnilib
Я чувствую, что это связано с тем, как я вызываю php, когда я запускаю задачу, но я теряюсь относительно того, почему у нее не будут те же библиотеки, что и при использовании командной строки.
Как я могу запустить java из задачи "background" Symfony?
Примечания
Раньше он работал без сбоев, пока я не поднял мачту с 1.9.6 до 2.0.3.
Я посмотрел: Сломанная Java Mac 10.6 но так как я могу запустить его в командной строке, это, по-видимому, другая проблема.
Я также посмотрел на Выполнение команды задачи symfony из разрешения shell_exec() отклонено, но я не думаю, что проблемы здесь.
Update:
Я сузил проблему до MAMP и добрался до php из браузера.
<?php
echo exec("java -version")
...
Будет работать при вызове из командной строки, но не при открытии php файла через браузер. Таким образом, способ настройки MAMP вызывает проблему.
Здесь информация об окружающей среде:
- Значение переменной
- SHELL/bin/bash
- TMPDIR/var/folders/YH/YH + uW3hDHZyxQ5AiUtr0T ++++ TI/-Tmp -/
- Apple_PubSub_Socket_Render/tmp/launch-3rr9ZI/Render
- ПОЛЬЗОВАТЕЛЬ myuser
- COMMAND_MODE unix2003
- SSH_AUTH_SOCK/tmp/launch-zinaMI/Слушатели
- __ CF_USER_TEXT_ENCODING 0x1F5: 0: 0
- PATH/usr/bin:/bin:/usr/sbin:/sbin
- PWD/
- HOME/Пользователи/myuser
- SHLVL 2
- DYLD_LIBRARY_PATH/Приложения/MAMP/Library/lib:
- LOGNAME myuser
- DISPLAY/tmp/launch-FYrw70/org.x:0
- _/Приложения/MAMP/Library/bin/httpd
Дайлд, кажется, присутствует здесь. Мне нужно найти способ отключить его из среды масок.
решаемые
Я выяснил решение. Это похоже на взлома, но это сработало. Я отправлю его здесь, просто если кто-то еще столкнется с той же проблемой.
Как Broken Java Mac 10.6 упоминает, что DYLD_LIBRARY_PATH должен быть отменен. Не уверен, почему, похоже, это необходимо для Unix-систем, но не для MacOSX.
Если MAMP устанавливает в /Applications/MAMP/Library/lib здесь, как отключить его: Измените /Applications/MAMP/Library/bin/envvars и прокомментируйте следующие строки
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
Чтобы это выглядело так:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
Это должно устранить проблему, и java 1.6 может работать нормально.
Это взломать? или это ошибка в MAMP? Пожалуйста, ответьте, если вы знаете лучший способ решить эту проблему.