I can't configure CakePHP 2.1.0 with MongoDB Datasource Plugin - php

I have gotten the latest CakePHP (2.1.0) and MongoDB Datasource Plugin both from git, and have followed the configuration settings as best as I can. I have placed the MonogoDB plugin in the plugins directory, and updated both my database.php and bootstrap.php files:
bootstrap.php:
CakePlugin::load('Mongodb');
database.php:
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Mongodb.MongodbSource',
'database' => 'database',
'host' => 'staff.mongohq.com',
'port' => 10070,
'login' => 'user',
'password' => 'secret'
);
}
I'm afraid I'm missing something stupid, but I keep getting the error:
Datasource class MongodbSource could not be found.
Which to me, implies it can find the plugin, but not the datasource class. Anyone seen this before? I've also tried to connect to a locally installed MongoDB, but same error persists.

Use this command to pull the plugin so it pulls the cake2.0 branch instead (which uses the correct cake 2.x directory naming conventions):
git clone -b cake2.0 git://github.com/ichikaway/cakephp-mongodb.git Mongodb

Please make sure that you are using the CakePHP-Mongo plugin for CakePHP 2.0 and not CakePHP 1.3

Related

Non-static method Redis::get() cannot be called statically in laravel 5.4?

i am working on Redis to store data Everything is working fine in my local system. i have successfully installed redis also in laravel with this command composer require predis/predis also and Redis setup of window also installed. Now when i store data in Redis like this:-
Redis::set('first',"My first Test"); // put data in Redis key
echo Redis ::get('first'); // get data
Above code is working fine in my local system. when i try to use this code in live server it is showing the below error:-
Please help me to resolve this issue. We are using amazon-ec2 server Thanks in advance :)
I had the same issue. But I believe its related to php 7 rather than Larevel 5.4 because I'm using Laravel 5.1 and I still have the problem.
I came across 2 solutions
Use use Illuminate\Support\Facades\Redis; instead of use Redis; if you want to call the Redis methods statically.
Change to dynamic calling
$redis = new Redis();
$redis->set('boo','Have beer and relax!')
$redis->get('boo');
Just remove or comment out extension=php_redis.dll from your php.ini
Laravel and server Redis conflicts with name "Redis"
This will work
In Laravel database config you can define a client for your Redis handler.
As you have installed predis, your Redis database configuration should look like this
'redis' => [
'client' => 'predis',
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
PhpRedis extension and Laravel alias for Redis Facades are same which is creating the issue. In case you want to use the PhpRedis extension you need to change the alias keyword defined in app.php and client in the database config.

Configure Cakephp 2.6.0 with Redis Engine

I am trying to configure cakephp ver 2.6.0 to use redis engine by default. but somehow i am not able to make it work. any help will be highly appreciated.
Things Which i have tried so far..
Configured app/config folder 2 files , core.php and bootstrap.php. , according to the guidelines provided here in this blog configure cake with redis and this blog too Another cake-redis config setup
but i keep on getting errors like.
Fatal error: Uncaught exception 'CacheException' with message 'Cache engine session is not properly configured.' in C:\wamp\www\project\cakephp\cakephp_2.6.0\lib\Cake\Cache\Cache.php on line 181
CacheException: Cache engine session is not properly configured. in C:\wamp\www\project\cakephp\cakephp_2.6.0\lib\Cake\Cache\Cache.php on line 181
Any help will be highly appreciated.
I was having the same exact issue today while trying to setup CakePHP to use Redis as the cache engine.
Coincidentally, I also read the same setup instructions from the two blogs you linked to.
The reason was that I had copied pasted the Configure::write(...) code block from the Another cake-redis config setup blog post as it is and pasted it into the file without first commenting out the Configure::write(...) code block that was already in the core.php file.
I'm assuming that you have already successfully setup Redis on Windows and have installed the PHPRedis extension without any issues.
I am using the instructions from Another cake-redis config setup here.
In your app/Config/core.php file, comment out the following block: (this was starting at line 218 in my core.php)
Configure::write('Session', array(
'defaults' => 'php'
));
Instead, you can put this in: (You can change the values to suit your particular needs)
Configure::write('Session', array(
'defaults' => 'cache',
'timeout' => 100,
'start' => true,
'checkAgent' => false,
'handler' => array(
'config' => 'session'
)
));
After this, change the value of $engine to 'Redis', so it becomes:
$engine = 'Redis';
And then, put this code in, I put this in at the very end of the file: (Again, your values can be different depending on what your setup is)
Cache::config ('session', array (
'Engine' => $engine,
'Prefix' => $prefix . 'cake_session_',
'Duration' => $duration
));
And that's it. You're done! No need to change anything else.
To make sure that Redis is working properly with CakePHP, I ran the RedisEngine Test Suite that comes with CakePHP. You need to have PHPUnit installed for this to work.
It can be accessed via http://your-cakephp-project/test.php
Click on 'Tests' under Core and then click on 'Cache/Engine/RedisEngine'
If everything is working successfully, you should see all the tests pass.
Alternatively, you can use redis-cli at the command prompt to confirm that Redis is storing keys properly.
Once you have logged in by typing redis-cli, type KEYS *
This should give you a list of keys related to your CakePHP setup.
An example would be the "myapp_cake_core_object_map" key.
Hope this helps.

CakePHP Database connection "Mysql" is missing, or could not be created

There have been several other posts about this, but none of the answers seemed to work for me.
When I navigate to the CakePHP page on my local machine, there is one error:
Cake is NOT able to connect to the database. Database connection
"Mysql" is missing, or could not be created.
When I run this helpful code in my home.ctp, I get the following response:
Error!: SQLSTATE[42000] [1049] Unknown database 'test'
However, my Users/Ben/Sites/myapp/app/Config/database.php looks like this (I set MAMP to look for the document root in Users/Ben/Sites):
<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'Ben',
'password' => 'mypass',
'database' => 'CV',
);
}
I have created a mysql user called Ben with password mypass and created a database called CV under that. Moreover, I can't find mention of a test database anywhere. Help?
Try adding the socket:
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
An alternative to unix_socket (especially for OS X people) is to replace localhost with 127.0.0.1
Would be as Follows :
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => '127.0.0.1',
'login' => 'user',
'password' => 'password',
'database' => 'database-name',
'prefix' => '',
'encoding' => 'utf8',
);
Edit php.ini and add:
extension=php_pdo_mysql.dll
Then restart your web server
On Mac, using MAMP as a development platform, for cake the correct solution is using Domingo Casarrubio solution.
Add the unix_socket parameter to your database configurations.
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
This error can also be caused if your connecting database user doesn't have the proper privileges. I believe you only need a minimum of INSERT, SELECT, UPDATE, and DELETE.
Always check username/password and the user privileges first since CakePHP will most likely give a vague database connection error for either.
I noticed that you've had asked this an year ago, and most probably would've solved this by now. However, for those facing the same issues when attempting to install CakePHP on XAMPP, all you have to do is change the 'login' to 'root', i.e. the default login of XAMPP, and leave the 'password' as '', i.e. blank. The complete code in your database.php file should look like this:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'ckblog',//replace with your own database name
'prefix' => '',
//'encoding' => 'utf8',
);
That's it.
I had the same problem and found out eventually that it was caused by CakePhp not accepting that I used a user with a password, even if that user was created in PHPMyAdmin. I had to use the user 'root' with no password.
I found this out after making the following change to the file /lib/Cake/Error/exceptions.php.
The original line:
protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';
is changed into this instead (note the change from single to double quotes):
protected $_messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n %s";
This will give you the reason for the problem so that you may change the cause properly.
I have had this problem since upgrading to OSX Yosemite and inserting following line did the trick for me:
'unix_socket' => '/tmp/mysql.sock'
It can be that mysql PDO support is missing.
as root (or using sudo):
apt-get install php5-mysql
Just to help Ubuntu users out:
I had the same error in my ubuntu 13.10 machine with the newest xampp downlaoded directly from apachefriends. Tried most of the stuff in every post I could find about this error, but not the mac-specific stuff.
In the end, the fix happened to be the same as the elected answer here:
Find the socket that mysqld creates for programs to connect to:
user#host /opt$ find . -name mysql.sock
/opt/lampp/var/mysql/mysql.sock
add it to your cakePHP database configuration file (cakePHP)/app/Config/database.php
'unix_socket' => '/opt/lampp/var/mysql/mysql.sock'
To me, this finally resulted in my cake commands being able to be executed without the "Error: Database connection "Mysql" is missing, or could not be created.".
Because, cake bake use unix socket for connecting to database
so that you need add unix_socket for connection string.
You have to confirm location that store mysql.sock in WAS
Example: in my case i'm using xampp on MACOS 10.11
(edit file Config/database.php)
public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘localhost’,
‘login’ => ‘root’,
‘password’ => ‘root’,
‘database’ => ‘cakephp’,
‘encoding’ => ‘utf8’,
‘unix_socket’ => ‘/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock’
);
Finally, It's work for me!
What did it for me in the end was that I had created a table in my database, but there was no data in it.
In order for CakePHP to recognize the MySql connection, there has to be a table with data in it.
You might need to create the table in your php file... Open up phpMyAdmin and check to ensure that they database CV exists.
It's your model. Open that up and there must be the following line
public $useDbConfig = 'local';
This overwrites global config & set it back to local
I tried splicing the code from Example 2 of http://php.net/manual/en/pdo.connections.php into /app/View/Pages/home.ctp. I had to fix the arguments the PDO constructor and change the name of the table in the query. The example 2 code returned the error "Error!: could not find driver". Based on King Jk's answer I was attempting to modify the php.ini when I started to wonder where a php_pdo_mysql.so might live. http://php.net/pdo_mysql showed how it was compiled as part of PHP via the --with-pdo-mysql option to configure. Recompiling fixed my problem. Note I'm working on a Ubuntu 12.10 system with PHP 5.5.9 and Apache Webserver 2.4.6
In my case it was because the database didn't exist. I expected running ./app/Console/cake schema create would create it but it did not. Creating it with create database <database name> in mysql did the trick (although I had already assigned privileges).
I've been struggling with this the whole weekend and finally solved it. Turns out that the php.ini is pointing to a non-existing "extensions dir". Create a phpinfo() file and look at the value of this field:
I noticed that in the mamp php installed folder there is a no-debug-non-zts-20131226 folder, which is different from the value shown in the phpinfo(). What I did was to clone this folder and changed the name to the value of the phpinfo(). Probably you could modify the php.ini file but I didn't want to.
I don't know if you solved your problem, but I'm posting this because my problem was different and google took me here, so I hope to help future googlers having a similiar issue.
Hope this helps.
If you're on Godaddy (or any other shared hosting for that matter), they may be limiting outgoing connections to ports 80 and 443 only.
System configuration:
Fedora 32
php-fpm 7.4.13
mariadb 10.4.17
CAKE 2.10.17
Error message from CAKE:
Database connection "Mysql" is missing, or could not be created.
Enhanced error message using answer at https://stackoverflow.com/a/24722976/5025060
Database connection "Mysql" is missing, or could not be created: Selected driver is not enabled
My problem was no "connector" between PHP and SQL was installed. The solution was:
dnf install php-mysqlnd
This allowed PHP to connect to the database as specified in CAKE's database.php configuration file.

Eloquent Laravel 4 package database configuration format

When creating a composer package that is meant to be run in the Laravel 4 framework, I want to create a default database connection set that looks something like this:
// File Location: LARAVEL4_ROOT/vendor/my/package/src/config/database.php
return array(
'connections' => array(
'reporting' => array(
'driver' => 'mysql',
'host' => getenv('REPORTING_HOST'),
'database' => getenv('REPORTING_DBNAME'),
'username' => getenv('REPORTING_USER'),
'password' => getenv('REPORTING_PASS'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
According to all the documentation I can find online, once I have registered my project using the Service Provider pattern and call $this->package('my/package'); Laravel 4 is supposed to magically load this file and give me access to it in the configuration.
And I have verified that I can call
Config::get('package::database.connections.reporting')
and it returns the array above.
However, when I construct my Eloquent Model file, and try to set the connection using
protected $connection = 'package::database.connections.reporting';
It doesn't work. I get an exception saying:
InvalidArgumentException: Database [package::database.connections.reporting] not configured.
Is there some magic string format I need to use to get the Connection Resolver to connect to my database using the default config in my package?
Thanks for your help!
Okay, I found a solution:
It appears that the connection handling in Laravel 4 as of this writing is not consistent with the the syntax that the Config facade uses. Therefore using:
protected $connection = 'package::database.connections.reporting';
... will not work because the DatabaseManager class ONLY searches the configuration loaded from laravelroot/app/config/database.php
So, at the time of this writing, the only way to establish a connection defined in my package configuration is to modify the previously loaded configuration array in my package service provider, like so:
public function boot()
{
$this->package('vendor/package');
include __DIR__."/routes.php";
// Add my database configurations to the default set of configurations
$this->app['config']['database.connections'] = array_merge(
$this->app['config']['database.connections']
,Config::get('reporting::database.connections')
);
}
This could easily be handled by the framework by modifying the DatabaseManager class to look at the provided connection name and resolve the configuration details in the same way as the Config facade does. But that is not implemented at the time of this writing.
I have forked the framework and submitted a pull request with a potential fix. We'll see how that goes. For now, you can use the above work around in your package service provider, and then just set the name of your connection in your model like this:
protected $connection = 'reporting';
Since the array of connections defined in my package config have been merged with the default connections defined in laravelroot/app/config/database.php, it's as if the connection was actually created there in the app config, so there is no need for package resolution in the connection name inside your model.
Hopefully, this will be automated in future releases of laravel 4, or a more intuitive way of loading package database config files in the package service provider will be implemented.

CakePHP: error when trying to use mssql datasource

This is my first time using ms sql with cakephp. Usually I use mysql. I've edited my database.php file:
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mssql',
'persistent' => false,
'host' => 'jura',
'login' => 'sa',
'password' => '********',
'database' => 'clientportal',
'prefix' => '',
);
var $test = array(
'driver' => 'mssql',
'persistent' => false,
'host' => 'jura',
'login' => 'sa',
'password' => '********',
'database' => 'clientportal',
'prefix' => '',
);
}
However when I view the index page i get this error:
PHP SQL Server interface is not installed, cannot continue. For troubleshooting information, see http://php.net/mssql/
Fatal error: Call to undefined function mssql_min_message_severity() in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\clientportaladmin\cake\libs\model\datasources\dbo\dbo_mssql.php on line 123
It's coming from this constructor in the dbo_mssql.php file:
function __construct($config, $autoConnect = true) {
if ($autoConnect) {
if (!function_exists('mssql_min_message_severity')) {
trigger_error(__("PHP SQL Server interface is not installed, cannot continue. For troubleshooting information, see http://php.net/mssql/", true), E_USER_WARNING);
}
mssql_min_message_severity(15);
mssql_min_error_severity(2);
}
return parent::__construct($config, $autoConnect);
}
I have the mssql extension in the php ini file
extension=php_mssql.dll
I've been using mssql databases with PHP on my setup extensively but am wondering if its because the ini file in my php directory are php.ini file is called php.ini-development and php.ini-production but I actually use a php.ini file sitting on the root of C:
Has anyone had to deal with this before? Or anyone know what I need to do? Using W7 btw.
Jonesy
You can`t use extension=php_mssql.dll in php 5.3* versions.
You need to use MSSQL driver for phpMSSQL driver
Open php.ini ,just add this line
extension=php_sqlsrv_53_ts_vc9.dll
use proper extensions files depending upon your version of PHP, whether its Thread safe or not, what was the version of Visual C++ to build your PHP installation.
php_sqlsrv_53_ts_vc9.dll: for instance this driver is for PHP version 5.3 which is thread safe and build using Visual C++ 9, you should also ensure that you have proper php.dll in php installation dir like php5ts.dll for thread safe version of PHP 5.xx
I am using the SQLSRV drivers and the according dbo_sqlsrv.php datasource for CakePHP.
the DATABASE_CONFIG the looks like this
var $default = array(
'driver' => 'sqlsrv',
'connect' => 'sqlsrv',
'persistent' => false,
'host' => 'tcp:NAUFRAGADOS',
'login' => 'sa',
'password' => '********',
'database' => 'geotest',
'prefix' => 'cake_',
);
notice the 'tcp:' in the host definition. This was what I was tripping about till I've got it right
What's the version of CakePHP you're using ?
Another thing, please check about the extension at http://localhost/phpinfo.php.
You should find the extensions that are enabled and seen by the server.
The problem you have is in two parts. Firstly as others have pointed out you're using PHP 5.3 which has no mssql PHP extension. You need to use the Sqlsrv drivers, update the php.ini file and test that you can connect to SQL Server using the sqlsrv drivers.
The second problem you then have is getting CakePHP to use the sqlsrv drivers. Depending on the CakePHP version you have you might need to install the separate sqlsrv database driver. I'm still using CakePHP 1.2 and I believe certainly also in CakePHP 1.3 you need to install the sqlsrv database drivers separately. I don't know if they've included sqlsrv drivers in CakePHP 2 yet.
There is an offical source for CakePHP v1.3+ data sources which includes a sqlsrv data source.
I'm getting the same error on the server using the migrations plugin:
http://cakedc.com/eng/pierre_martin/2010/02/05/cakephp-migrations-plugin-easily-version-and-deploy-whole-applications
it works locally, and the site itself can access the MS SQL DB without problems. It's just the command line cake migration commands that give this error. I'm pretty much stuck with whatever the PHP configuration is on the server. It really would be handy to use this plugin, but I'm not sure where to start looking or tweaking to track this down, but I wonder if it's the same underlying issue?

Categories