我正在做一个Symfony项目,使用理论作为ORM,MariaDB作为驱动程序。
为了测试我的不同工作,我和在MacOs本地的gitlab-runner一起工作。
问题
我创建一个作业来测试不同数据库的创建以及这两个数据库的迁移。
我使用symfony-cli命令行从理论的文件配置创建我的数据库(参见源文件一节)
使用symfony-cli创建数据库的命令行。
$ php bin/console doctrine:database:create --env=test --if-not-exists --connection=[CONNECTION_NAME]命令行被要求运行时的错误提示
$ php bin/console doctrine:database:create --env=test --if-not-exists --connection=CleanerFuture
Could not create database `cf_CleanerFuture` for connection named CleanerFuture
An exception occurred while executing 'CREATE DATABASE `cf_CleanerFuture`':
SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'myapptest'@'%' to database 'cf_CleanerFuture'目标
我的目标是尝试用这个命令行创建数据库,以运行我的工作,然后再运行到下一个
源文件
..gitlab ci.yml
这就是我要执行的任务
doctrine-migrations:
image: php:7.3
stage: Migrations
services:
- name: mysql:5.7
alias: mysql
variables:
ENV: test
MYSQL_ROOT_PASSWORD: pass_test
MYSQL_DATABASE: cf_Central
MYSQL_USER: myapptest
MYSQL_PASSWORD: myapptest
DATABASE_URL: 'mysql://myapptest:myapptest@mysql:3306/'
before_script:
- apt-get update
- apt-get install -y git libzip-dev
- curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer
- docker-php-ext-install mysqli pdo pdo_mysql zip
- curl -sS https://get.symfony.com/cli/installer | bash
- mv /root/.symfony/bin/symfony /usr/local/bin/symfony
- composer remove ext-xdebug
- composer install
script:
- php bin/console doctrine:database:drop --force --if-exists --env=test --connection=default
- php bin/console doctrine:database:drop --force --if-exists --env=test --connection=CleanerFuture
- php bin/console doctrine:database:create --env=test --if-not-exists --connection=CleanerFuture
- php bin/console doctrine:migrations:migrate --env=test
allow_failure: false配置/测试/理论。
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%cf_central'
server_version: "mariadb-10.4.11"
driver: 'pdo_mysql'
charset: utf8
CleanerFuture:
url: '%env(resolve:DATABASE_URL)%cf_CleanerFuture'
server_version: "mariadb-10.4.11"
driver: 'pdo_mysql'
charset: utf8
orm:
auto_generate_proxy_classes: true
default_entity_manager: default
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
connection: default
mappings:
Central:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Central'
prefix: 'App\Entity\Central'
CleanerFuture:
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
connection: CleanerFuture
mappings:
Client:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Client'
prefix: 'App\Entity\Client'发布于 2022-02-15 21:48:59
url: '%env(resolve:DATABASE_URL)%cf_CleanerFuture'在您的config/test/doctrine.yaml文件中:
部件cf_CleanerFuture将添加到变量DATABASE_URL的字符串值中,该变量是在.env文件中定义的。
如果数据库连接的.env文件值包含以下内容
DATABASE_URL="mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0"配置的处理内容将是
doctrine:
dbal:
default_connection: default
connections:
default:
url: 'mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0cf_central''mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0cf_central'似乎是有效的(理论可以连接,参数serverVersion将被忽略,如果不能使用),但是参数serverVersion的值现在是8.0cf_central。这是没有意义的,因为它不是一个有效的版本号,而且您还没有配置不同的数据库连接。
更建议使用两个不同的环境变量,并将整个连接URL存储在以下变量中:
# config/packages/doctrine.yaml
doctrine:
dbal:
default_connection: default
connections:
default:
# configure these for your database server
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
customer:
# configure these for your database server
url: '%env(resolve:DATABASE_CUSTOMER_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4还请参阅Symfony文档,其中描述了如何配置多个数据库连接:https://symfony.com/doc/current/doctrine/multiple_entity_managers.html
https://stackoverflow.com/questions/69776225
复制相似问题