質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

15887閲覧

CakePHP で データベース接続エラーが表示されます。Database connection "Mysql" is missing, or could not be created.

hogetail

総合スコア46

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2015/08/09 09:50

編集2015/08/09 09:59

目的

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() )); } }

として「接続成功!」はこのシェルを回した時に表示されます。

何か根本的におかしい設定をしているのかもしれません。

ご回答お待ちしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Localなのにエラーメッセージではproductionとなっていますが、この点はいかがでしょうか?
#3 ...(省略)...: Model->setDataSource('production')

投稿2015/08/09 14:23

rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogetail

2015/08/09 19:35

ご回答ありがとうございます。 今回やっていたことでは nginx を経由しておらず、database の設定が適切に読み込まれておりませんでした。 シェルを実行する際に $ CAKE_ENV=Local Console/cake My myMethod と 環境変数を指定することで実行可能になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問