“데이터베이스 파일을 열 수 없습니다”라는 sqlite 오류가 발생하는 이유는 무엇입니까? 오류가 발생합니다. 데이터베이스

Django 앱을 사용하면 데이터베이스에서 잘 읽을 수 있습니다. 응용 프로그램에 파일에 대한 액세스 권한이 없으면 다음과 같은 오류가 발생했습니다.

읽기 전용 데이터베이스 쓰기 시도

말이 되네요. 그래서 파일에 대한 권한을 편집하여 Apache 프로세스가 쓰기 권한을 갖도록했습니다. 그러나 작성하는 대신이 암호 오류가 발생합니다.

데이터베이스 파일을 열 수 없습니다

유용한 경우 전체 출력은 다음과 같습니다.

Request Method: POST
Request URL:    http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193
Python Executable:  /usr/bin/python
Python Version: 2.5.2
Python Path:    ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time:    Sun, 23 Aug 2009 07:06:08 -0500

스택 추적이 필요한지 알려주세요.



답변

아하, 방금 이것을 설명 하는 기사를 발견 했습니다. 또한 장고는 NewbieMistakes 페이지 에 정보를 가지고 있습니다 .

해결책은 데이터베이스 파일이 포함 된 디렉토리에 프로세스에 대한 쓰기 액세스 권한이 있는지 확인하는 것입니다.

필자의 경우이 명령을 실행하면 문제가 해결되었습니다.

sudo chown www-data .


답변

이것에 대한 나의 해결책은 더 비슷했습니다. 나는이 디렉토리의 소유권을 바꾸고 싶지 않았다. (주로 pi 사용자를 사용하여 git과 같은 일을하기 때문에)

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(또는 사용중인 DB)

여기서 pi는 모든 파일을 만든 사용자입니다 (예 : 라즈베리 파이).

www-data에 대한 권한을 변경하는 대신 다음과 같이 권한을 변경하기 만하면된다는 것을 알았습니다.

sudo chmod 775 /var/www/mysite
sudo chmod 664 /var/www/mysite/sqlite.db
sudo usermod -a -G pi www-data

이렇게하면 필요한 파일에 그룹 쓰기 권한이 부여되고 www-data 사용자가 pi 그룹에 추가됩니다.

참고 : 로깅이있는 경우 django 로그 파일에 대해서도이 작업을 수행해야하거나 아파치가별로 좋아하지 않습니다.


답변

로부터 장고 sqlite3를를 사용하는 경우 “데이터베이스 파일을 열 수 없습니다”라는 섹션신참 실수 장고 위키 페이지 :

  1. Apache가 데이터베이스의 상위 디렉토리에도 쓸 수 있는지 확인하십시오.
  2. 데이터베이스 파일의 전체 경로 폴더가 숫자로 시작하지 않도록하십시오
  3. db디렉토리가 존재 하는 전체 경로를 확인하십시오
  4. /tmp디렉토리가 쓰기 가능한지 확인하십시오
  5. 에 지정된 데이터베이스 settings.py경로가 전체 경로 인지 확인하십시오.
  6. 경로에 특수 문자가 없는지 확인하십시오
  7. Windows에서 db 디렉토리 경로가 이중 백래시로 작성되었는지 확인하십시오.

답변

www-data 그룹에 운영 사용자를 추가하는 것이 테스트 환경에서 잘 작동합니다. 또한 sqlite3.db 파일을 별도의 하위 폴더 에 저장하여 더 안전합니다.

데이터베이스 파일은 www-data가 소유해야합니다.

sudo chown www-data mysite/db_sqlite3/
sudo chown www-data mysite/db_sqlite3/my.db

운영 사용자 hape가 www-data 그룹의 구성원을 얻습니다.

sudo usermod -a -G www-data hape

www-data 그룹의 구성원에 대한 데이터베이스 파일 쓰기 액세스를 허용하십시오.

sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db

결과적으로, 프로젝트 루트 폴더에 대한 권한을 부여하지 않고 apache2-daemon (사용자 www-data)이 데이터베이스에 읽기 + 쓰기에 액세스 할 수 있으며, 반면에 앱은 운영에 의해 개발 모드에서 실행될 수 있습니다 예. 사용자 방해

./manage.py runserver

또한.


답변

SO 질문에서 차용 : https : //.com/questions/4283132/apache-instance-user-permission-issue

아파치 사용자가 파일을 시작한다고 가정합니다.

% chown -R apache.apache /var/www/mysite

설정 한 ACLs사용자 / 그룹에 대한 PI :

% setfacl -d -m u:pi:rwx /var/www/mysite
% setfacl -d -m g:pi:rwx /var/www/mysite

% getfacl /var/www/mysite
# file: /var/www/mysite
# owner: apache
# group: apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:pi:rwx
default:group::r-x
default:group:pi:rwx
default:mask::rwx
default:other::r-x

권한 비트의 끝에 ‘+’ 가있는 ACLwith 가 있음을 알 수 있습니다 ls -l.

# ls -la /var/www
drwxr-xr-x   3 apache   apache   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 apache   apache   40 26. Nov 12:43 mysite


답변

해결책은 데이터베이스 파일이 포함 된 디렉토리에 프로세스에 대한 쓰기 액세스 권한이 있는지 확인하는 것입니다.

들어 윈도우 등 7, 8.1, 10, 서버 2012, 추적 보노보 설치 방향 :

IIS 사용자가 C : \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data 폴더를 수정하도록 허용하십시오.

그렇게하려면 :

  1. App_Data 폴더의 속성을 선택하고
  2. 보안 탭으로 이동하여
  3. 편집을 클릭하십시오.
  4. IIS 사용자 (내 경우에는 IIS_IUSRS)를 선택하고 수정 및 쓰기 권한을 추가하십시오.
  5. 적용 버튼으로 이러한 설정을 확인하십시오.

답변

개발 서버는 데이터베이스 폴더에 쓰기 권한을 가진 동일한 사용자로 실행해야하므로 처음에 데이터베이스를 루트로 만든 경우 다음을 실행할 때 루트 여야합니다.

python manage.py runserver