Сбой развертывания проекта OpenShift Django: «ошибка: не удается создать или удалить файлы в каталоге установки»

#python #virtualenv #openshift

#python #virtualenv #openshift

Вопрос:

Я обновлял свой проект после долгого бездействия, и что-то сломалось. Сбой развертывания, и приложение не было перезапущено после git push .

Я все еще могу запустить свое приложение вручную, запустив gear start , но шаги развертывания, необходимые для установки пакетов install_requires , завершаются неудачей.

Вот части gear deploy вывода:

 Activating virtenv
Running setup.py script..
running develop
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: '/usr/lib/python2.6/site-packages/test-easy-install-358943.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

    /usr/lib/python2.6/site-packages/

Perhaps your account does not have write access to this directory?  If the
installation directory is a system-owned directory, you may need to sign in
as the administrator or "root" account.  If you do not have administrative
access to this machine, you may wish to choose a different installation
directory, preferably one that is listed in your PYTHONPATH environment
variable.

For information on other options, you may wish to consult the
documentation at:

  http://peak.telecommunity.com/EasyInstall.html

Please make the appropriate changes for your system and try again.
 

И, позже:

 Running collectstatic...
Traceback (most recent call last):
  File "~/app-root/runtime/repo//wsgi/music/manage.py", line 2, in <module>
    from django.core.management import execute_manager
ImportError: No module named django.core.management
 

Я попытался включить venv и запустить setup.py вручную:

 source $OPENSHIFT_GEAR_DIR/virtenv/bin/activate
export PYTHON_EGG_CACHE=$OPENSHIFT_GEAR_DIR/virtenv/lib/python-2.6
~/app-root/repo/setup.py develop
 

Однако это привело к той же can't create or remove files in install directory ошибке. И я не могу работать manage.py в этой среде, как и раньше.

Мне кажется, что что-то случилось с venv, но, значит, gear start он тоже использует его, и он все еще работает…

Кто-нибудь может рассказать мне об этой проблеме?

PS Я использую картридж Python 2.6

Комментарии:

1. для записи вам нужны sudo разрешения или разрешения на запись /usr/lib/

2. Это вопрос, специфичный для OpenShift. OpenShift — это PaaS RedHat. Я не думаю, что они предоставят мне привилегированный доступ 😉

3. ну, вы не можете записывать в каталог без sudo, попробуйте указать каталог, в котором у вас есть права на запись.

4. @PadraicCunningham Да, укажите каталог, доступный для записи. В OpenShift все запускается через его сценарии управления, которые делают это автоматически, и я спрашиваю, как их восстановить или как они на самом деле работают.

5. Насколько я вижу, ~/python/virtualenv/bin/python интерпретатор не устанавливает пути virtualenv, в то время как выполнение ~/python/virtualenv/bin/activate_this.py в общесистемном интерпретаторе python делает. Вот почему shellscripts, которые полагаются на source activate сбой, в то время как интерфейс wsgi, полагающийся на activate_this.py работу.

Ответ №1:

По крайней мере, у меня это работает. Произошел беспорядок с символическими ссылками, virtenv/lib64 -> ../../python-2.6/virtenv/lib был доступен только из ~/python-2.6 , что является символической ссылкой на ~/python , которая содержит virtenv , на которую фактически ссылаются переменные среды, на которые указывает другая символическая ссылка ~/app-root/runtime/dependencies/python/virtenv . В результате интерпретатор virtenv python не смог найти библиотеки и другие материалы virtenv/lib64 и вернулся к /usr prefix.

Я просто указал lib64 -> lib и развертывание теперь работает.

Однако весь этот беспорядок каким-то образом был создан набором инструментов OpenShift, и я не уверен, что он не сломается снова.