Posts Tagged ‘osx’

Resolving Hibernate exceptions with MySQL on Linux because of case-sensitive table names

Oktober 16th, 2009 | By Christoph in Software-Development | No Comments »

Today I tried to deploy my application from my OSX dev machine to a server on Amazon EC2.

I was running into exceptions like this:

Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [app.model.entities.Jobs#8]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1895)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:207)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:822)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:815)
at org.springframework.orm.hibernate3.HibernateTemplate$3.doInHibernate(HibernateTemplate.java:569)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
… 30 more
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table ‘database.Files’ doesn’t exist

Although all my table names are lowercase it seems that Hibernate tries to create case-sensitive SQL queries which relate to the name of my POJOs (e.g. MyPojo) .

While this was working on my OSX it didn’t on Fedora Linux on EC2.

Solution:

In my /etc/my.cnf I had to add the following configuration property:

lower_case_table_names=1

Thanks to the following articles which helped me:

http://www.parkroad.co.za/mysql-case-sensitivity-table-names-between-windows-and-linux-systems

http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

https://forum.hibernate.org/viewtopic.php?p=2394017

Resolving trouble with Ruby On Rails with MySql on XAMPP on OSX Snow Leopard

Oktober 9th, 2009 | By Christoph in Software-Development | 3 Comments »

I was trying to work through the Get Started guide of Ruby On Rails but I had issues when I was trying to run the command “rake db:migrate” the first time.

It was complaining that the mysql gem was not up to date or something and I had to do a “gem install mysql”. But that resulted in errors as decribed in the following blog posts:
http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard#comment-5544

http://boonedocks.net/mike/archives/175-MAMP-and-the-Ruby-MySQL-Gem.html

I had issues as I was using XAMPP and “gem install mysql” was complaining about missing mysql.h I had to upgrade my XAMPP and additionally download the XAMPP developer tools.

Go to http://sourceforge.net/projects/xampp/files/ and download:
xampp-macosx-1.7.2a.dmg
xampp-macosx-1.7.2a-dev.dmg

Of course first I had to remove/backup my existing XAMPP folder under /Applications/xampp Then I installed the new version and after that the xampp-macosx-1.7.2a-dev.dmg developer pack. this xampp-macosx-1.7.2a-dev.dmg contains the mysql.h header files and so on. After that dev tools installation the XAMPP folder has a new folder called “include” which has all the mysql header files like mysql.h Then the following command line worked for me:

sudo ARCHFLAGS=”-arch i386″ gem install mysql — –with-mysql-dir=/Applications/XAMPP/xamppfiles/

Note I was pointing to the xamppfiles base-dir as the mysql-dir, because then all the paths are relative as if this would be the mysql root dir.

Update: But as I am writing this, I was running into new trouble. It seems I need to update to the 64bit MySQL Version because of Snow Leopard, because now I am running into new problems:

Couldn’t create database for {”username”=>”root”, “adapter”=>”mysql”, “database”=>”mydatabase”, “password”=>nil, “socket”=>”/tmp/mysql.sock”}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)

According to http://www.techskater.com/ruby-on-rails/problems-with-mysql-gem-and-rake-on-snow-leopard/ this seems to be related to Snow Leopard and MySql 32bit vs. 64bit. On Snow Leopard the Gem Mysql needs to be build against a 64bit mysql or so.

I am currently reading http://weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard to resolve the issues and update MySQL. Let’s see…

Update 2: So I have finally installed MySQL 64Bit as suggested on the page above and I can start it. A “rake db:create” has also worked now as I could verify via MySQL Query browser. Let’s see what is the next thing which is not working…

Update 3: It really looks I am done and I am currently working through the Getting Started Guide.

Conclusion: 3 hours wasted to get it running on my OSX Snow Leopard. I did the same yesterday on my Windows machine at work and I didn’t have any such problems. It seems to be only related to Snow Leopard.  You might just read this page http://weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard and ignore everything above, but I leave it in this blog post for further reference. The difference is that you might not continue using the MySQL from XAMPP but a standalone mySQL. But you can still use phpMyAdmin from XAMPP or MySQL Query Browser to manage your database.