2015-02-17 16 views
6

Po dodaniu Pythona auth społecznego do moich zainstalowanych aplikacji, tjdjango makemigrations z python-społecznego-auth prowadzi do uprawnien błędu

INSTALLED_APPS = (
    ... 
    'social.apps.django_app.default', 
    ... 
) 

a następnie wypróbowanie

python manage.py makemigrations 

dostaję zaskakujące uprawnienia błąd

Migrations for 'default': 
    0002_auto_20150217_2053.py: 
    - Alter field user on usersocialauth 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/lib/python2.7/site-packages/django/core/management /__init__.py", line 385, in execute_from_command_line 
utility.execute() 
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
File "/usr/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 124, in handle 
    self.write_migration_files(changes) 
File "/usr/lib/python2.7/site-packages/django/core/management/commands /makemigrations.py", line 153, in write_migration_files 
    with open(writer.path, "wb") as fh: 
    IOError: [Errno 13] Permission denied: u'/usr/lib/python2.7/site-packages/social/apps/django_app/default/migrations/0002_auto_20150217_2053.py' 

Ma sens, że nie mogę napisać do dyrektora instalacji pakietowej o zasięgu systemowym ies.

Istnieje kilka oczywistych sposobów obejścia tego problemu, takich jak zmiana uprawnień w katalogach site-packages/social /social. Czy jest to jednak jedyny sposób, aby to zrobić, czy też czegoś brakuje?

+0

Dlaczego próbujesz wykonać migrację do aplikacji w pakiecie systemowym? Jeśli chcesz się przyczynić, powinieneś skopiować kod tego pakietu do oddzielnego projektu django i wykonać tam migracje. – GwynBleidD

+0

Dobra uwaga. Ale właśnie podążałem za radą tutaj https://python-social-auth.readthedocs.org/en/latest/configuration/django.html – mjandrews

+0

Myślę, że to błąd w dokumentacji Pythona-social-auth. Pakiet powinien zawierać migracje gotowe do użycia. – GwynBleidD

Odpowiedz

0

Jak stwierdzono w pytaniu, zmiana uprawnień do katalogów byłaby rozwiązaniem. Innym sposobem na to jest stworzenie izolowanego środowiska Python dla twojego projektu Django przy użyciu virtualenv. Lub, wygodniej, rozszerzenie virtualenvwrapper.

Instalacja później tak:

$ pip install virtualenvwrapper 

Poniższa stwarza obraz aktywuje virtualenv dla swojego projektu:

$ mkvirtualenv django_project 
$ workon django_project 

Po tym, jesteś wolny, aby zainstalować Django i Python Social Auth

$ pip install django 
$ pip install python-social-auth 

Zauważysz, że wszystko to zostanie zainstalowane w $HOME/.virtualenvs/django_project

Jest to powszechna, zalecana praktyka wśród użytkowników Python i Django. Rozwiąże problemy z uprawnieniami, a także inne problemy z zależnościami, które możesz napotkać, jeśli używasz instalacji Pythona w systemie dla wszystkich projektów.

Zauważ, że Python Social Auth robi w rzeczywistości wymagają utworzenia migracji przed jego zastosowaniem w projekcie Django, migracja dodaje related_name do klucza obcego „użytkownika” w „UserSocialAuth” modelu

+1

Dobra rada! Poszedłem i ustawiłem virtualenv teraz. Dziękuję Ci. – mjandrews

1

Z zaakceptowane rozwiązanie powyżej, skutecznie umieszczasz pliki projektu w swoim środowisku Pythona. I za każdym razem, gdy instalujesz na nowym serwerze, musisz uruchomić makemigracje, aby utworzyć te pliki.

Co powiesz na to, że migracje społecznościowe mają miejsce w twoim własnym projekcie?

MIGRATION_MODULES = { 
    # social.apps.django_app.default  
    'default': 'myproject.mysocial.migrations',   
} 

W ten sposób, podczas wdrażania do swojego serwera, projekt jest samowystarczalny i będzie działać bez włamania środowiska Pythona.

+0

Dobrze, ale to rozwiązanie również nie działa. Nadal działa w systemie/zewnętrznym podejściu do plików migracyjnych :( – chefarov

0

Żadna z tych odpowiedzi nie rozwiązuje problemu, o ile wiem. Po prostu zainstalowanie nowej aplikacji nie powinno wymagać tworzenia nowych plików migracji; powinny one, można by się spodziewać, zostać wysłane wraz z pakietem aplikacji.

Wygląda to na błąd lub niedopatrzenie autora paczki.

Powiązane problemy