我收到一个奇怪的警告,我无法用Symfony2 v2.0.12版本修复。昨天一切顺利。我怀疑最近唯一相关的变化是我最近将symfony2本身(安装到vendors/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. SymfonyComponentHttpKernelKernel->handle() /Symfony2/web/app_dev.php:10
0.0102 1461700 3. SymfonyBundleFrameworkBundleHttpKernel->handle() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Kernel.php:171
0.0102 1462608 4. SymfonyComponentHttpKernelHttpKernel->handle() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php:47
0.0102 1462608 5. SymfonyComponentHttpKernelHttpKernel->handleRaw() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:71
0.0594 4226612 6. SymfonyComponentHttpKernelHttpKernel->filterResponse() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:139
0.0595 4232664 7. SymfonyBundleFrameworkBundleContainerAwareEventDispatcher->dispatch() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:157
0.0598 4245456 8. SymfonyComponentEventDispatcherEventDispatcher->dispatch() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php:145
0.0599 4246116 9. SymfonyBundleFrameworkBundleDebugTraceableEventDispatcher->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. SymfonyComponentHttpKernelEventListenerProfilerListener->onKernelResponse() /Symfony2/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php:0
0.0640 4470124 12. SymfonyComponentHttpKernelProfilerProfiler->saveProfile() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php:124
0.0640 4470124 13. SymfonyComponentHttpKernelProfilerPdoProfilerStorage->write() /Symfony2/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/Profiler.php:91
0.0650 4516660 14. SymfonyComponentHttpKernelProfilerSqliteProfilerStorage->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应用程序的Apache2VirtualHost。我原以为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升级。不过,我正在查看提交,还没有发现任何可能最近打破这一局面的东西。
- 我的用户(
adam
)和www-data
的umask
都返回0002
- 我使用的是Ubuntu 11.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