django:如何避免迁移时出现权限错误

django: How to avoid permission error on migration

我正在尝试在虚拟服务器上部署 Django 应用程序 运行 ubuntu 16.04.

python manage.py makemigrations

在创建了一些模型和字段之后导致以下追溯:

Traceback (most recent call last):
  File "manage.py", line 12, in <module>
    execute_from_command_line(sys.argv)
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 150, in handle
    self.write_migration_files(changes)
  File "/home/sysadmin/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 179, in write_migration_files
    with open(writer.path, "wb") as fh:
IOError: [Errno 13] Permission denied: u'/home/sysadmin/public_html/aegee-stuttgart.org/aegeewww/migrations/0001_initial.py'

我也试过:

sudo python manage.py makemigrations

但是由于我使用的是虚拟环境,所以出现以下错误,因为 django 没有在系统范围内安装:

ImportError: No module named django.core.management

我该如何解决这个错误? python路径识别正确,venv中明显安装了django。

我必须如何为用户设置权限?

谢谢!

您需要授予用户访问迁移文件夹的权限:

sudo chown <your_username> <path_to_migrations_folder>

目录应为当前用户所有才能对其进行更改。
对于即时解决方案使用:
尝试:sudo python3 manage.py makemigrations

也尝试通过以下方式更改 chown sudo chown owner_name foldername(or)dir
ex:sudo chown ubuntu db.sqlite3 对应目录下.

检查使用:
ls -la 显示当前目录下文件的权限。

如果没有任何效果,请尝试更改 read/write 文件的权限:
sudo chmod permission_no dir_name permission_no 6644 或 777 都可以。
例如:sudo chmod 777 db.sqlite3