[chef] Re: Can't set encoding on MySQL database


Chronological Thread 
  • From: Joshua Timberman < >
  • To:
  • Subject: [chef] Re: Can't set encoding on MySQL database
  • Date: Mon, 21 Nov 2011 10:49:20 -0700

Hello!

On Nov 21, 2011, at 6:33 AM, Kevin Harvey wrote:

> "databases": {
>   "_default": {
>     "encoding": "utf8",
>     "username": "django",
>     "adapter": "mysql",
>     "port": "3306",
>     "database": "django_production",
>     "password": "awesome_password"
> }
> 
> However, this doesn't seem to get picked up, as after the server is created 
> I try this:
> 
> ssh 
> 
> 
> mysql -u root -p
> mysql> use django_production;
> mysql> SHOW VARIABLES LIKE "character\_set\_database";
> +------------------------+--------+
> | Variable_name          | Value  |
> +------------------------+--------+
> | character_set_database | latin1 |
> +------------------------+--------+
> 1 row in set (0.00 sec)
> 
> I took a look at cookbooks/database/master.rb, and edited as such to try to 
> get the encoding added in, starting at line 84:
> 
> ...
>     mysql_database "create #{db['database']}" do
>       host "localhost"
>       username "root"
>       password root_pw
>       database db['database']
>       encoding db['encoding']     # I added this line
>       action [:create_db]
>     end
> ...

The 'encoding' in the application data bag examples is primarily there from 
the application::rails recipe, and it is not used in the local_settings.py 
file. It also is not used in the mysql_database resource, which is why adding 
the `encoding db['encoding']` line didn't do anything. It appears you're 
using an older version of the mysql cookbook, where the mysql_database 
resource was defined. The actual query is:

    action :create_db do
      ...
          db.query("create database #{new_resource.database}")
      ...
    end

It simply sends the `create database` query, but does not specify any 
encoding. FYI, this provider is moved to the `database` cookbook in newer 
versions of both. I created a COOK ticket to track this:

http://tickets.opscode.com/browse/COOK-841

For now, you should be able to work around this issue by adding this to 
cookbooks/mysql/resources/database.rb:

    attribute :encoding, :kind_of => String, :default => "utf8"

And modify the db.query line in the cookbooks/mysql/providers/database.rb 
under the create_db action to:

          db.query("create database #{new_resource.database} CHARACTER SET = 
'#{new_resource.encoding}'")

This will default to utf8.

-- 
Opscode, Inc
Joshua Timberman, Technical Program Manager
IRC, Skype, Twitter, Github: jtimberman




Archive powered by MHonArc 2.6.16.

§