目的
Error: Database connection "Mysql" is missing, or could not be created.
このエラーが 自作シェルを作成中に表示されるようになってしまったので、修正したい。
現状
ローカル環境(local)
- VMWare Fusion
- Ubuntu 14.04 LTS
- cakephp
- nginx
- mysql
本番環境(production)
- さくらのVPS
- Ubuntu 14.04 LTS
- cakephp
- nginx
- mysql
ローカル環境(local)と本番環境(production)で 読み込む database の設定を変えています。
設定は下記のとおりです。
開発しているのはローカル環境のほうです。
自作のシェル(app/Console/Command/MyShell.php)を
Console/cake My myMethod
して回しています。
現状はここまでなのですがエラーメッセージがでてしまいます。
エラーメッセージ
Welcome to CakePHP v2.5.8 Console --------------------------------------------------------------- App : app Path: /var/www/local.hoge.com/app/ --------------------------------------------------------------- Error: Database connection "Mysql" is missing, or could not be created. #0 /var/www/local.hoge.com/lib/Cake/Model/Datasource/DboSource.php(260): Mysql->connect() #1 /var/www/local.hoge.com/lib/Cake/Model/ConnectionManager.php(105): DboSource->__construct(Array) #2 /var/www/local.hoge.com/lib/Cake/Model/Model.php(3545): ConnectionManager::getDataSource('production') #3 /var/www/local.hoge.com/lib/Cake/Model/Model.php(1136): Model->setDataSource('production') #4 /var/www/local.hoge.com/lib/Cake/Model/Model.php(3572): Model->setSource('app_models') #5 /var/www/local.hoge.com/lib/Cake/Model/Model.php(1368): Model->getDataSource() #6 /var/www/local.hoge.com/lib/Cake/Model/Model.php(1552): Model->schema() #7 /var/www/local.hoge.com/app/Console/Command/GetAccessLogShell.php(44): Model->create() #8 /var/www/local.hoge.com/lib/Cake/Console/Shell.php(437): GetAccessLogShell->crawl() #9 /var/www/local.hoge.com/lib/Cake/Console/ShellDispatcher.php(209): Shell->runCommand('crawl', Array) #10 /var/www/local.hoge.com/lib/Cake/Console/ShellDispatcher.php(66): ShellDispatcher->dispatch() #11 /var/www/local.hoge.com/app/Console/cake.php(47): ShellDispatcher::run(Array) #12 {main}
app/Config/database.php
php
1class DATABASE_CONFIG { 2 3 public $local = array( 4 'datasource' => 'Database/Mysql', 5 'persistent' => false, 6 'host' => '127.0.0.1', 7 'login' => 'user', 8 'password' => 'pass', 9 'database' => 'local_hoge_com', 10 'prefix' => '', 11 'encoding' => 'utf8', 12 ); 13 14 public $production = array( 15 'datasource' => 'Database/Mysql', 16 'persistent' => false, 17 'host' => '127.0.0.1', 18 'login' => 'user', 19 'password' => 'pass', 20 'database' => 'hoge_com', 21 'prefix' => '', 22 'encoding' => 'utf8', 23 ); 24}
/etc/nginx/sites-available/local.hoge.com.conf
server { ~ ### 省略 ~ location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param CAKE_ENV 'Local'; } } ~
app/Model/AppModel.php
php
1class AppModel extends Model { 2 public function __construct($id = false, $table = null, $ds = null) { 3 parent::__construct(); 4 5 if (getenv('CAKE_ENV') == 'Local') { 6 $this->useDbConfig = 'local'; 7 } else { 8 $this->useDbConfig = 'production'; 9 } 10 } 11} 12
var_dump(getenv('CAKE_ENV’));
をすると
Local
が返ってきます。
app/Console/Command/MyShell.php
php
1<?php 2class MyShell extends AppShell { 3 public $uses = array('Table'); 4 function myMethod() {
PDO で Database 接続のチェック
app/Console/Command/MyShell.php
内に
function myMethod() { $dsn = 'mysql:dbname=local_hoge_com;host=127.0.0.1'; $user = 'user'; $pass = 'pass'; try { $dbh = new PDO($dsn, $user, $pass); if ($dbh == null) { echo '接続に失敗しました'; } else { echo '接続成功!'; } } catch(PDOException $e) { var_dump($e->getMessage()); throw new MissingConnectionException(array( 'class' => get_class($this), 'message' => $e->getMessage() )); } }
として「接続成功!」はこのシェルを回した時に表示されます。
何か根本的におかしい設定をしているのかもしれません。
ご回答お待ちしております。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/09 19:35