Ubuntu symfony2警告:sqlite3探查器数据库为只读

Ubuntu symfony2警告:sqlite3探查器数据库为只读,ubuntu,sqlite,symfony,Ubuntu,Sqlite,Symfony,我收到一个奇怪的警告,我无法用Symfony2 v2.0.12版修复。昨天这个工作很好。我怀疑最近唯一相关的变化是我最近将symfony2本身(安装到供应商/symfony)从v2.0.5升级到v2.0.12 Warning: SQLite3Stmt::execute(): Unable to execute statement: attempt to write a readonly database in /Symfony2/vendor/symfony/src/Symfony/Compon

我收到一个奇怪的警告,我无法用Symfony2 v2.0.12版修复。昨天这个工作很好。我怀疑最近唯一相关的变化是我最近将symfony2本身(安装到
供应商/symfony
)从v2.0.5升级到v2.0.12

Warning: SQLite3Stmt::execute(): Unable to execute statement: attempt to write a readonly database in /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/SqliteProfilerStorage.php on line 66

Call Stack:
    0.0000     329108   1. {main}() /Symfony2/web/app_dev.php:0
    0.0015     720736   2. Symfony\Component\HttpKernel\Kernel->handle() /Symfony2/web/app_dev.php:10
    0.0102    1461700   3. Symfony\Bundle\FrameworkBundle\HttpKernel->handle() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Kernel.php:171
    0.0102    1462608   4. Symfony\Component\HttpKernel\HttpKernel->handle() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php:47
    0.0102    1462608   5. Symfony\Component\HttpKernel\HttpKernel->handleRaw() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:71
    0.0594    4226612   6. Symfony\Component\HttpKernel\HttpKernel->filterResponse() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:139
    0.0595    4232664   7. Symfony\Bundle\FrameworkBundle\ContainerAwareEventDispatcher->dispatch() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:157
    0.0598    4245456   8. Symfony\Component\EventDispatcher\EventDispatcher->dispatch() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php:145
    0.0599    4246116   9. Symfony\Bundle\FrameworkBundle\Debug\TraceableEventDispatcher->doDispatch() /Symfony2/vendor/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:49
    0.0609    4265376  10. call_user_func() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php:82
    0.0609    4265404  11. Symfony\Component\HttpKernel\EventListener\ProfilerListener->onKernelResponse() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php:0
    0.0640    4470124  12. Symfony\Component\HttpKernel\Profiler\Profiler->saveProfile() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php:124
    0.0640    4470124  13. Symfony\Component\HttpKernel\Profiler\PdoProfilerStorage->write() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/Profiler.php:91
    0.0650    4516660  14. Symfony\Component\HttpKernel\Profiler\SqliteProfilerStorage->exec() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/PdoProfilerStorage.php:103
    0.0651    4563392  15. SQLite3Stmt->execute() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/SqliteProfilerStorage.php:66
app/logs/test.log
中,我看到这样的行

[2012-03-30 14:40:49] profiler.WARNING: Unable to store the profiler information. [] []
有什么想法吗

我在一个调试器中浏览了SqliteProfilerStorage,了解到有问题的Sqlite3数据库位于
app/cache/dev/profiler.db

$ ls -l app/cache/dev/profiler.db
-rw-r--r--+ 1 adam www-data  51200 2012-03-30 13:56 app/cache/dev/profiler.db

$ getfacl app/cache/test/profiler.db
# file: app/cache/test/profiler.db
# owner: www-data
# group: www-data
user::rw-
user:www-data:rwx       #effective:r--
user:adam:rwx           #effective:r--
group::rwx          #effective:r--
mask::r--
other::r--
我经常从命令行运行phpunit测试,还找到了指向同一个Symfony2应用程序的Apache2虚拟主机。我原以为ACL会允许这两种情况交替发生,但我对上面ACL中的
effective:r--
有点困惑

我设置了权限。我这样做:

$ mkdir app/{cache,logs}
$ chmod 775 app/{cache,logs}
$ sudo setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
$ sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
这又一次引起了问题,所以我怀疑Symfony2的升级。我正在查看提交,但我还没有找到任何可能最近破坏此功能的内容

  • umask
    对于我的用户(
    adam
    )和
    www-data
    返回
    0002
  • 我正在使用Ubuntu11.10
  • ,但建议的解决方案对我不起作用
    profiler.db
    始终具有权限
    0644

    • 可能只是因为您忘记了递归地设置文件的775权限

      试一试

      chmod 775 -R app/{cache,logs}
      

      您是否检查了父目录权限

      我用这个解决了一个类似的问题:

      chgrp www-data app app/symfony.db
      chmod 775 app
      chmod 664 app/symfony.db
      

      我也有同样的问题,但我想指出的是,我在2.0.9和2.0.12版本中都得到了它,如果您使用acl列表,就不需要
      chmod
      。我想你已经尝试过删除
      缓存的内容
      并让Symfony从头开始重建它了吗?@gilden是的,尝试过。真奇怪。。。就好像ACL不起作用一样<不过,code>getfacl似乎正在工作。fs是ext4。嗯,那么我必须经常这么做。在我开始看到这个问题之前,我一直定期运行
      rm-rf app/{cache,logs}/*
      ,直到事情变得一团糟。已经有一段时间了,但我很确定这就是问题所在。原因可能是Symfony2框架中使用不正确的权限创建sqlite db。