Usando meu aplicativo Django, sou capaz de ler o banco de dados muito bem. Quando o aplicativo não tinha permissão para acessar o arquivo, ele me deu este erro:
tentar escrever um banco de dados somente leitura
O que fazia sentido. Então, editei as permissões no arquivo, para que o processo Apache tivesse permissões de gravação. No entanto, em vez de poder escrever, recebo este erro enigmático:
incapaz de abrir o arquivo de banco de dados
Se for útil, aqui está toda a saída:
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
Deixe-me saber se um rastreamento de pilha é necessário.
Respostas:
Aha, apenas tropeçou em um artigo explicando isso. O Django também tem informações na página NewbieMistakes .
A solução é garantir que o diretório que contém o arquivo de banco de dados também tenha acesso de gravação permitido ao processo.
No meu caso, executar este comando corrigiu o problema:
fonte
chown www-data. .
na verdade, deve ser dechown www-data .
outra forma, existe algum comando mágico de chown que eu não conheço ... por favor, me esclareça.Minha solução para isso foi mais assim. Eu realmente não queria mudar a propriedade desse diretório. (principalmente porque eu uso o usuário pi para fazer coisas como git)
(ou qualquer que seja o db que você esteja usando)
onde pi é o usuário em que criei todos os arquivos. (sim, este é um raspberry pi)
Em vez de alterar as permissões para www-data, descobri que eu só precisava alterar as permissões como esta:
Isso fornece acesso de gravação ao grupo aos arquivos necessários e adiciona o usuário www-data ao grupo pi.
Nota: se você tiver log, precisará fazer isso também para o arquivo de log do django ou o apache não gostará muito.
fonte
Desde o Django diz "Não é possível abrir o arquivo de banco de dados" ao usar SQLite3 seção da erros Novato wiki Django página :
db
diretório existe/tmp
diretório é gravável no mundosettings.py
é um caminho completofonte
Adicionar um usuário operacional ao grupo www-data está funcionando bem no meu ambiente de teste. Além disso, coloquei o arquivo sqlite3.db em uma subpasta separada , para ser mais seguro.
O arquivo de banco de dados deve pertencer a www-data
Meu hape de usuário operacional obtém um membro do grupo www-data:
Permitir acesso de gravação do arquivo de banco de dados aos membros do grupo www-data:
Como resultado, o banco de dados pode ser acessado como leitura + gravação pelo apache2-daemon (usuário www-data), sem conceder permissão à pasta raiz do projeto e - por outro lado - o aplicativo pode ser executado no modo dev pelo operacional hape de usuário, por exemplo
Além disso.
fonte
Emprestado da pergunta SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Assumindo que os arquivos pertencem ao usuário apache para iniciar:
definido
ACLs
para o usuário / grupo pi:Você pode dizer que há um
ACL
comls -l
, o '+' à direita nos bits de permissão:fonte
Para Windows 7, 8.1, 10, Server 2012, etc., siga as instruções de instalação do Bonobo :
Permita que o usuário do IIS modifique a pasta C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Para fazer isso:
fonte
O servidor de desenvolvimento precisa ser executado como o mesmo usuário que possui permissões de gravação na pasta do banco de dados; portanto, se você originalmente criou o banco de dados como raiz, será necessário ser root quando executar:
fonte
root
é uma terrível ideia - Seria melhor parachown
o banco de dados para o usuário sem privilégios regular que normalmente é executado o servidor ...crie um subdiretório no diretório de trabalho
criar banco de dados sqlite no subdiretório
alterar o proprietário do subdiretório para www-data em debain ou apache no centOS
e tome uma cerveja gelada porque está pronto.
P / S: para verificar se o procedimento foi bem-sucedido
você deveria ver tal
fonte
basta escrever
sudo sqlite3 databaseFilename.sql
e é trabalhofonte