wercker.com 连接到 MySQL 数据库
wercker.com connect to MySQL database
背景
我正在尝试使用 http://wercker.com. I have created my own Docker repo https://hub.docker.com/r/consynki/yii2/ 为 Yii2 应用程序构建一些自动化测试,它提供了一个简单的 LAMP 堆栈。
我正在使用 Docker 存储库作为我的 wercker.yml 文件中的框,通过几个简单的步骤来设置我的应用程序,初始化数据库,然后 运行 我的 phpunit 测试
box: consynki/yii2
build:
steps:
- script:
name: Update enviroment dependencies
code: |-
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
- script:
name: Install Composer dependencies
code: |-
rm -rf ./vendor
/usr/bin/composer install --no-interaction --prefer-source
- script:
name: Apache site install
code: |-
sudo chmod -R 755 /var/www
sudo cp -r ./ /var/www/example.lan/
sudo chown -R $USER:$USER /var/www/example.lan/
sudo cp ./config/example.lan.conf /etc/apache2/sites-available/example.lan.conf
sudo a2ensite example.lan.conf
sudo cp -fr ./config/hosts /etc/hosts
sudo service apache2 restart
- script:
name: Create database
code: |-
mysql -uroot -e "SHOW DATABASES;"
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test"
- script:
name: PHPUnit integration tests
code: |-
./vendor/bin/phpunit --configuration phpunit.xml
问题
问题是,当我 运行 使用 wercker CLI wercker build
我的构建时,它无法连接到 mysql。在尝试 运行 'Create database' 步骤时,我不断收到以下连接错误 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
。
- script:
name: Create database
code: |-
mysql -uroot -e "SHOW DATABASES;"
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test"
我知道 docker 容器有一个 mysql 连接,因为我可以通过 ssh 进入它并且 运行 mysql -uroot -e "SHOW DATABASES;"
编辑 我当前正在进行的工作 wercker lamp 模板可在 https://github.com/levi-putna/php-cli-template
获得
请求
我知道 wercker.com 比较新,没有很多文档。但我希望有人能为我提供一个示例,说明如何在 wercker 测试 运行.
中使用 mysql
编辑 - 使用 Wercker 服务
我也尝试使用 Wercker MariaBD 服务进行连接,它不完全是 MySQL,因此不是对我的生产环境的真正测试,但应该足以开始测试。
我更新了我的 wercker.yml 以添加 mariadb 服务。简化了我的步骤,让数据库连接正常工作。
box: consynki/yii2
services:
- id: mariadb
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
build:
steps:
- script:
name: Create database
code: |-
mysql -h $MARIADB_PORT_3306_TCP_ADDR -P $MARIADB_PORT_3306_TCP_PORT -u $MYSQL_USER -p test123 -v
mysql -h $MARIADB_PORT_3306_TCP_ADDR -P $MARIADB_PORT_3306_TCP_PORT -u $MYSQL_USER -p test123 -e "SHOW DATABASES;"
我似乎仍然遇到与我原来的方法相同的错误。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
在 wercker 步骤退出后,我还看到了一些额外的日志消息。
WARNING Box container has already stopped.
Initializing database
2016-03-01 22:51:00 140429748197312 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 51 ...
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Database physically writes the file full: wait...
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2016-03-01 22:51:01 140429748197312 [Warning] InnoDB: New log files created, LSN=45883
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Doublewrite buffer not found: creating new
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Doublewrite buffer created
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:01 140429748197312 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Foreign key constraint system tables created
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Creating tablespace and datafile system tables.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Tablespace and datafile system tables created.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 0
2016-03-01 22:51:01 140428963710720 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-03-01 22:51:03 140216194230208 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 80 ...
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Highest supported file format is Barracuda.
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 1616799
2016-03-01 22:51:04 140215410722560 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-03-01 22:51:06 140659046377408 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 109 ...
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Highest supported file format is Barracuda.
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 1616809
2016-03-01 22:51:06 140658262116096 [Note] InnoDB: Dumping buffer pool(s) not yet started
ERROR: 1049 Unknown database 'test'
2016-03-01 22:51:06 140659046377408 [ERROR] Aborting
您可以使用 Wercker 准备的现成 MySQL 服务器,而不是设置您自己的服务器。这将确保它在调用之间持续存在。
说明
好的,我使用@Tal 的建议成功建立了一个数据库连接。 Wercker docks 仅提供了一个使用 MariaDB 的示例,幸运的是 MySQL 有一个 docker 容器,其工作方式几乎与 MariaDB 版本完全相同。
我将新容器作为服务添加到我的 wercker.yml。
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
然后我能够使用 MySQL 服务公开的环境变量在我的 Wercker 步骤中连接到数据库。
- script:
name: Create database
code: mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS test;"
我还可以使用 PHP 中的环境变量来连接到数据库。
class SampleTest extends PHPUnit_Framework_TestCase
{
public function testSetupWorking()
{
$this->assertEquals(true, true);
$this->assertFalse(false);
}
public function testDatabase()
{
$hostname = $_SERVER["MYSQL_PORT_3306_TCP_ADDR"];
$username = 'root';
$password = $_SERVER["MYSQL_ENV_MYSQL_ROOT_PASSWORD"];
$database = $_SERVER["MYSQL_ENV_MYSQL_DATABASE"];
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$this->assertFalse(false);
} catch (PDOException $e) {
echo $e->getMessage();
$this->assertFalse(true, $e->getMessage());
}
}
}
我的完整 wercker.yml 是这样的,你可以在 https://github.com/levi-putna/php-cli-template 看到我的完整模板。这只是一个示例,您可能想要清理 PHP 连接到数据库的步骤和方式,但这是一个很好的起点。
答案 - 完整 wercker.yml
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
box: consynki/yii2
build:
steps:
- script:
name: Show Enviroment
code: printenv
- script:
name: Update enviroment dependencies
code: |
sudo DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install curl php5-cli php5-curl git
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
cd $WERCKER_SOURCE_DIR
- script:
name: Install Composer dependencies
code: |
rm -rf ./vendor
/usr/bin/composer install --no-interaction
- script:
name: Serve application
code: php -S localhost:8000 >> /dev/null &
- script:
name: Create database
code: mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS test;"
- script:
name: PHPUnit integration tests
code: ./vendor/bin/phpunit --configuration phpunit.xml
我已使用以下配置连接到 mysql:
box: ruby:2.1.9
build:
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: 5.5.55
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: roo
MYSQL_USER: testuser
MYSQL_PASSWORD: testuser
MYSQL_DATABASE: testdb
steps:
- bundle-install
- rails-database-yml
- script:
name: echo ruby information
code: |
echo "ruby version $(ruby --version) running!"
echo "from location $(which ruby)"
echo -p "gem list: $(gem list)"
- script:
name: Set up db
code: |
touch db/schema.rb
bundle exec rake db:migrate RAILS_ENV=test
- script:
name: rspec
code: bundle exec rspec
关于rails-database-yml
步的信息,可以在here
找到
背景
我正在尝试使用 http://wercker.com. I have created my own Docker repo https://hub.docker.com/r/consynki/yii2/ 为 Yii2 应用程序构建一些自动化测试,它提供了一个简单的 LAMP 堆栈。
我正在使用 Docker 存储库作为我的 wercker.yml 文件中的框,通过几个简单的步骤来设置我的应用程序,初始化数据库,然后 运行 我的 phpunit 测试
box: consynki/yii2
build:
steps:
- script:
name: Update enviroment dependencies
code: |-
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
- script:
name: Install Composer dependencies
code: |-
rm -rf ./vendor
/usr/bin/composer install --no-interaction --prefer-source
- script:
name: Apache site install
code: |-
sudo chmod -R 755 /var/www
sudo cp -r ./ /var/www/example.lan/
sudo chown -R $USER:$USER /var/www/example.lan/
sudo cp ./config/example.lan.conf /etc/apache2/sites-available/example.lan.conf
sudo a2ensite example.lan.conf
sudo cp -fr ./config/hosts /etc/hosts
sudo service apache2 restart
- script:
name: Create database
code: |-
mysql -uroot -e "SHOW DATABASES;"
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test"
- script:
name: PHPUnit integration tests
code: |-
./vendor/bin/phpunit --configuration phpunit.xml
问题
问题是,当我 运行 使用 wercker CLI wercker build
我的构建时,它无法连接到 mysql。在尝试 运行 'Create database' 步骤时,我不断收到以下连接错误 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
。
- script:
name: Create database
code: |-
mysql -uroot -e "SHOW DATABASES;"
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test"
我知道 docker 容器有一个 mysql 连接,因为我可以通过 ssh 进入它并且 运行 mysql -uroot -e "SHOW DATABASES;"
编辑 我当前正在进行的工作 wercker lamp 模板可在 https://github.com/levi-putna/php-cli-template
获得请求
我知道 wercker.com 比较新,没有很多文档。但我希望有人能为我提供一个示例,说明如何在 wercker 测试 运行.
中使用 mysql编辑 - 使用 Wercker 服务
我也尝试使用 Wercker MariaBD 服务进行连接,它不完全是 MySQL,因此不是对我的生产环境的真正测试,但应该足以开始测试。
我更新了我的 wercker.yml 以添加 mariadb 服务。简化了我的步骤,让数据库连接正常工作。
box: consynki/yii2
services:
- id: mariadb
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
build:
steps:
- script:
name: Create database
code: |-
mysql -h $MARIADB_PORT_3306_TCP_ADDR -P $MARIADB_PORT_3306_TCP_PORT -u $MYSQL_USER -p test123 -v
mysql -h $MARIADB_PORT_3306_TCP_ADDR -P $MARIADB_PORT_3306_TCP_PORT -u $MYSQL_USER -p test123 -e "SHOW DATABASES;"
我似乎仍然遇到与我原来的方法相同的错误。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
在 wercker 步骤退出后,我还看到了一些额外的日志消息。
WARNING Box container has already stopped.
Initializing database
2016-03-01 22:51:00 140429748197312 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 51 ...
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2016-03-01 22:51:00 140429748197312 [Note] InnoDB: Database physically writes the file full: wait...
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2016-03-01 22:51:01 140429748197312 [Warning] InnoDB: New log files created, LSN=45883
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Doublewrite buffer not found: creating new
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Doublewrite buffer created
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:01 140429748197312 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Foreign key constraint system tables created
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Creating tablespace and datafile system tables.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Tablespace and datafile system tables created.
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:01 140429748197312 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 0
2016-03-01 22:51:01 140428963710720 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-03-01 22:51:03 140216194230208 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 80 ...
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Highest supported file format is Barracuda.
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:03 140216194230208 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 1616799
2016-03-01 22:51:04 140215410722560 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-03-01 22:51:06 140659046377408 [Note] /usr/sbin/mysqld (mysqld 10.1.12-MariaDB-1~jessie) starting as process 109 ...
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: The InnoDB memory heap is disabled
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Memory barrier is not used
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using Linux native AIO
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Using SSE crc32 instructions
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Completed initialization of buffer pool
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Highest supported file format is Barracuda.
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: 128 rollback segment(s) are active.
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Waiting for purge to start
2016-03-01 22:51:06 140659046377408 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 1616809
2016-03-01 22:51:06 140658262116096 [Note] InnoDB: Dumping buffer pool(s) not yet started
ERROR: 1049 Unknown database 'test'
2016-03-01 22:51:06 140659046377408 [ERROR] Aborting
您可以使用 Wercker 准备的现成 MySQL 服务器,而不是设置您自己的服务器。这将确保它在调用之间持续存在。
说明
好的,我使用@Tal 的建议成功建立了一个数据库连接。 Wercker docks 仅提供了一个使用 MariaDB 的示例,幸运的是 MySQL 有一个 docker 容器,其工作方式几乎与 MariaDB 版本完全相同。
我将新容器作为服务添加到我的 wercker.yml。
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
然后我能够使用 MySQL 服务公开的环境变量在我的 Wercker 步骤中连接到数据库。
- script:
name: Create database
code: mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS test;"
我还可以使用 PHP 中的环境变量来连接到数据库。
class SampleTest extends PHPUnit_Framework_TestCase
{
public function testSetupWorking()
{
$this->assertEquals(true, true);
$this->assertFalse(false);
}
public function testDatabase()
{
$hostname = $_SERVER["MYSQL_PORT_3306_TCP_ADDR"];
$username = 'root';
$password = $_SERVER["MYSQL_ENV_MYSQL_ROOT_PASSWORD"];
$database = $_SERVER["MYSQL_ENV_MYSQL_DATABASE"];
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$this->assertFalse(false);
} catch (PDOException $e) {
echo $e->getMessage();
$this->assertFalse(true, $e->getMessage());
}
}
}
我的完整 wercker.yml 是这样的,你可以在 https://github.com/levi-putna/php-cli-template 看到我的完整模板。这只是一个示例,您可能想要清理 PHP 连接到数据库的步骤和方式,但这是一个很好的起点。
答案 - 完整 wercker.yml
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: latest
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: test_database
MYSQL_USER: admin
MYSQL_PASSWORD: test123
box: consynki/yii2
build:
steps:
- script:
name: Show Enviroment
code: printenv
- script:
name: Update enviroment dependencies
code: |
sudo DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install curl php5-cli php5-curl git
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
cd $WERCKER_SOURCE_DIR
- script:
name: Install Composer dependencies
code: |
rm -rf ./vendor
/usr/bin/composer install --no-interaction
- script:
name: Serve application
code: php -S localhost:8000 >> /dev/null &
- script:
name: Create database
code: mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS test;"
- script:
name: PHPUnit integration tests
code: ./vendor/bin/phpunit --configuration phpunit.xml
我已使用以下配置连接到 mysql:
box: ruby:2.1.9
build:
services:
- id: mysql
# your credentials for Docker Hub
username: $USERNAME
password: $PASSWORD
tag: 5.5.55
# set the required environment variable
env:
MYSQL_ROOT_PASSWORD: roo
MYSQL_USER: testuser
MYSQL_PASSWORD: testuser
MYSQL_DATABASE: testdb
steps:
- bundle-install
- rails-database-yml
- script:
name: echo ruby information
code: |
echo "ruby version $(ruby --version) running!"
echo "from location $(which ruby)"
echo -p "gem list: $(gem list)"
- script:
name: Set up db
code: |
touch db/schema.rb
bundle exec rake db:migrate RAILS_ENV=test
- script:
name: rspec
code: bundle exec rspec
关于rails-database-yml
步的信息,可以在here