Исключение WebDriverException из Selenium firefox_binary.py только при запуске из mod_wsgi

#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