尝试在Symfony中加载Doctrine数据夹具时出现“无法打开数据库文件”错误

时间:2015-06-11 21:53:07

标签: symfony doctrine-orm behat

我在prod,stag和dev环境中使用pdo_mysql,在测试环境中使用pdo_sqlite。问题是加载Doctrine Data Fixtures会产生unable to open database file错误,如下所示。我按照symfony website中的定义分配了缓存文件夹的权限,并尝试使用777,但没有运气。

我在MAC OS Yosemite上,并且在PHP中启用了sqlite3。

PDO drivers mysql, sqlite, dblib, pgsql
SQLite3 module version  0.7-dev
SQLite Library  3.8.8.3

此命令成功创建数据库:

MBP:football bc$ php app/console doctrine:schema:update --force --env=test
Updating database schema...
Database schema updated successfully! "9" queries were executed

此命令失败:

MBP:football bc$ php app/console doctrine:fixtures:load --no-interaction --no-debug --env=test

  [PDOException]                                     
  SQLSTATE[HY000] [14] unable to open database file 

config_test.yml (两种配置都不起作用)

doctrine:
    dbal:
        driver: pdo_sqlite
        path: %kernel.cache_dir%/default.db
        charset: UTF8

#doctrine:
#    dbal:
#        default_connection: default
#
#        connections:
#            default:
#                driver:  pdo_sqlite
#                path:    %kernel.cache_dir%/default.db
#                charset: utf8

config.yml

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

更新

上面的设置/步骤在Ubuntu中运行正常,因此这是与MAC OS相关的问题。 Mac用户,知道为什么吗?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并通过为数据库文件创建父目录来解决它:     database_path: %kernel.root_dir%/data/data.db3,所以我创建了数据'目录。当然,要确保所有文件夹都是Doctrine可写的。希望它有所帮助!

答案 1 :(得分:1)

正如Symfony website中所述,如果您遇到某种权限问题,Mac用户应通过运行以下命令在app/cache文件夹上使用特定权限:

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

实际上这是导致问题的原因所以解决这个问题:

rm -Rf app/cache/test/*

并且不要为cache/test文件夹分配任何权限。