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 dava este erro:
tentar escrever um banco de dados somente leitura
O que fazia sentido. Então eu editei as permissões no arquivo, para que o processo do 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á a saída inteira:
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.
Aha, acabei de encontrar um artigo explicando isso. O Django também tem informações em sua 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:
Do Django diz "Não é possível abrir o arquivo de banco de dados" ao usar a seção SQLite3 da página wiki do Django de erros para iniciantes :
db
diretório existe/tmp
diretório seja gravável em todo o mundosettings.py
seja um caminho completoMinha solução para isso foi mais assim. Eu realmente não queria mudar a propriedade deste diretório. (principalmente porque eu uso o usuário pi para fazer coisas como git)
(ou qualquer db que você esteja usando)
onde pi é o usuário em que criei todos os arquivos. (sim, este é um pi de framboesa)
Em vez de alterar as permissões para www-data, descobri que só precisava alterar as permissões assim:
Isso dá ao grupo acesso de gravação 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 vai gostar muito.
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 ser de propriedade de www-data
Meu usuário operacional hape obtém um membro do grupo www-data:
Permitir acesso de gravação de arquivo de banco de dados aos membros do grupo www-data:
Como resultado, o banco de dados pode ser acessado leitura+gravação pelo apache2-daemon (usuário www-data), sem conceder a pasta raiz do projeto, e - por outro lado - o aplicativo pode ser executado em modo dev pelo operacional esperança do usuário, por exemplo
também.
Para Windows 7, 8.1, 10, Server 2012, etc. siga as instruções de instalação do Bonobo :
Permitir que o usuário do IIS modifique a pasta C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data.
Para fazer isso:
Emprestado da pergunta SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Supondo que os arquivos sejam de propriedade do usuário do apache para iniciar:
definido
ACLs
para usuário/grupo pi:Você pode dizer que há um
ACL
withls -l
, o '+' final nos bits de permissões: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ê criou originalmente o banco de dados como root, precisará ser root ao executar:
crie um subdiretório no diretório de trabalho
criar banco de dados sqlite no subdiretório
altere o proprietário do subdiretório para www-data no debain ou apache no centOS
e pegue uma cerveja gelada porque você está pronto.
P/S: para verificar se o procedimento foi bem sucedido
você deveria ver tal
basta escrever
sudo sqlite3 databaseFilename.sql
e é trabalho