#python #selenium #mod-wsgi #wsgi
#python #селен #mod-wsgi #wsgi
Вопрос:
Я использую Python 2.7, Virtualenv, Django 1.3, mod_wsgi, приложение Apache в Ubuntu 11.04. Все, включая psycopg2 и т. Д., Отлично работает с wsgi, и приложение запущено. Единственная проблема связана с Selenium. Я получаю эту ошибку ТОЛЬКО тогда, когда я выполняю это из wsgi при создании драйвера firefox следующим образом:
from selenium import webdriver
wd = webdriver.Firefox()
Значение исключения WebDriverException: Сообщение: «Не удается загрузить профиль.
Каталог профиля: /tmp/tmp8h7MW8»
моя версия Selenium 2.5 Apache запускается как root, а дочерний процесс запускается как приложение, вызываемое пользователем.
Выполнение приведенного выше кода из того же virtualenv без wsgi работает просто отлично.
Так что это заставляет меня думать, что это проблема с разрешением на каком-то уровне… итак, я попробовал это:
ls -l /tmp/tmp8h7MW8
>> drwxr-xr-x 3 app app 4096 2011-10-07 13:09 extensions
>> -rw-r--r-- 1 app app 2188 2011-10-07 13:09 user.js
Я был бы признателен, если бы вы могли указать мне правильное направление относительно того, что я могу неправильно настроить wsgi
Ответ №1:
Процессы Apache выполняются от имени специального пользователя. Если этот временный каталог действительно принадлежит «приложению», то пользователь Apache, скорее всего, не сможет в него записывать.
От имени какого пользователя запускается Apache? Используете ли вы режим демона и переопределили, от имени какого пользователя он должен запускаться?
Комментарии:
1. вот разрешения:
$ ls -l drwxr-xr-x 4 app app 4096 2011-10-04 11:18 tmp $ ps aux | grep apache2 root 5007 0.0 0.1 10280 4004 ? Ss 14:14 0:00 /usr/sbin/apache2 -k start app 5104 0.0 0.0 10280 2284 ? S 14:16 0:00 /usr/sbin/apache2 -k start app 5105 0.1 0.7 254368 24112 ? Sl 14:16 0:00 /usr/sbin/apache2 -k start app 5106 0.1 0.7 254372 24124 ? Sl 14:16 0:00 /usr/sbin/apache2 -k start
Я не указываю режим. Поэтому я считаю, что он работает в режиме демона.. Это правильно?2. Какие директивы пользователя / группы установлены в конфигурации Apache? Используете ли вы директиву WSGIDaemonProcess / WSGIProcessGroup в конфигурации Apache / mod_wsgi? Если да, установили ли вы для параметров пользователя / группы значение WSGIDaemonProcess вообще? Процесс Apache, похоже, запущен как «приложение», но, пожалуйста, подтвердите это, просмотрев config.
3. В конфигурации Apache я установил значение app:
User app Group adm
это группы пользователей «app»: «$groups app >> app: app adm dialout fax cdrom floppy tape dip video plugdev fuse — я не устанавливал никаких параметров пользователя / группы, установленных в конфигурации mod_wsgi. вот мой файл .wsgi: > WSGIScriptAlias / /home/app/myapp/apache/django.wsgi > <Directory /home/app/myapp/apache> Параметры Индексы Следующие ссылки Несколько просмотров Порядок Разрешить, запретить разрешить из всех > </Directory>4. Поскольку это, по-видимому, не является разрешениями, если только вы не используете SELinux и не навязываете что-то странное, убедитесь, что вы всегда используете абсолютные пути в своем приложении для ссылки на вещи, а не относительные, поскольку текущий рабочий каталог Apache может быть любым, обычно / и не там, где находится ваше приложение.
5. SELinux не установлен. Я проверил файл конфигурации wsgi и конфигурацию vhost, и, насколько я вижу, я не использую относительный путь. Все начинается с /home/app/ … Я опубликовал как проблему на selenium и посмотрел, могут ли они дать мне места, которые я мог бы посмотреть дальше. Ссылка на билет Selenium
Ответ №2:
Итак, я проследил firefx_binary.py и выясните, что фактической ошибкой было «отказано в подключении» при вызове socket_.connect((«127.0.0.1», self.profile.port)). Значение порта меняется каждый раз (т.Е.: 45807, 44719, 60565)
Возникновение ошибки зависит от настройки группы в конфигурации apache (запуск пользователя и группы apache), как подозревал Грэм. Я играл с 2 пользователями.
$ groups app
app : app
$ groups nreeves
nreeves : nreeves adm dialout fax cdrom floppy tape dip video plugdev fuse
Я попробовал 3 скороговорки, и только 1 работает, что все еще меня смущает, и надеюсь, что кто-нибудь скажет мне, почему…
# this does't work...
User=nreeves
Group=adm
# this does't work either
User=app
Group=app
# this works
User=nreeves
Group=nreeves