I swore I wouldn't

Icon

Oh no, I'm blogging now?

The change you wanted was rejected – Rails Problem

I received the error “The change you wanted was rejected” after I moved a rails app from one host to another.

Looking into the log file, the following error appears:

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
/usr/lib/ruby/1.8/mongrel/rails.rb:76:in `process'
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `synchronize'
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `process'
/usr/lib/ruby/1.8/mongrel.rb:159:in `process_client'
/usr/lib/ruby/1.8/mongrel.rb:158:in `each'
/usr/lib/ruby/1.8/mongrel.rb:158:in `process_client'
/usr/lib/ruby/1.8/mongrel.rb:285:in `run'
/usr/lib/ruby/1.8/mongrel.rb:285:in `initialize'
/usr/lib/ruby/1.8/mongrel.rb:285:in `new'
/usr/lib/ruby/1.8/mongrel.rb:285:in `run'
/usr/lib/ruby/1.8/mongrel.rb:268:in `initialize'
/usr/lib/ruby/1.8/mongrel.rb:268:in `new'
/usr/lib/ruby/1.8/mongrel.rb:268:in `run'
/usr/lib/ruby/1.8/mongrel/configurator.rb:282:in `run'
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `each'
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `run'
/usr/lib/ruby/1.8/mongrel/command.rb:212:in `run'

Rendering /vol/sites/site/public/422.html (422 Unprocessable Entity)

Some further investigation revealed that there was an issue with how rails 2.3.8 was handling cookies.  I stumbled upon the following fix at https://rails.lighthouseapp.com/projects/8994/tickets/4690.

I used Ken Collins’ fix of adding his mongrel.rb (http://gist.github.com/471663) to config/initializers and now all is well.

HTML pages returned as plaintext, who is the culprit?


I have been moving applications from my Rackspace host over to Amazon’s EC2 service.  Moving simple LAMP apps has been fairly cut and dry, but while moving a RoR app and accessing it through apache w/ mod_proxy, the html is delivered to the browser as plaintext.  If I access the app directly on mongrel’s port, it renders correctly.   So it appears that something with either my mod_proxy configuration, or something about how my EC2 instance is set up is causing the problem.


> curl -I http://linux.local:3000
HTTP/1.1 200 OK
Connection: close
Date: Thu, 15 Jul 2010 14:27:27 GMT
Content-Length: 0

> curl -I http://linux.local
HTTP/1.1 200 OK
Date: Thu, 15 Jul 2010 14:27:35 GMT
Via: 1.1 linux.local
Content-Type: text/plain

As you can see, when accessing the page through Apache/mod_proxy, the Content-Type that is returned is explicitly set as text/plain.

Update
This is a bit shoe-horned, but it works for right now. In the apache2.conf file, I changed the DefaultType from text/plain to text/html. The reason this solution “concerns” me is that on my other servers, (where this problem is not occurring) the DefaultType is also set to text/plain, but the html is output correctly.

Installing MySQL gem on OS X


I encountered the following error when installing the mysql gem on a shiny new Macbook Pro running OS X Leopard.

Note: I have ~/.gem set as my GEM_HOME and GEM_PATH to avoid needing to sudo


> gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

The workaround was fairly simple. Since I had installed MySQL from source the situation was resolved with a few command line options:


> export ARCHFLAGS="-arch x86_64"
> gem install mysql -- \
--with-mysql-dir=/usr/local/mysql \
--with-mysql-lib=/usr/local/mysql/lib \
--with-mysql-include=/usr/local/mysql/include \
--with-mysql-config=/usr/local/mysql/bin/mysql_config

Building native extensions. This could take a while...
Successfully installed mysql-2.8.1
1 gem installed

Installing MySQL from source on OS X

While MAMP has proven to be very convenient for doing local development, not having the MySQL header files around sometimes causes difficulty when it comes time to install/compile something that needs those header files to be in place.

Getting Ready
I always set up a src directory under my user account for these installations.

> cd ~
> mkdir src
> cd src

Download MySQL Community Edition
At the time of this writing, it could be found at http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.45.tar.gz

Download this file into your src directory.

> curl -O http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.45.tar.gz

Untar, configure, and install

> tar -xvzf mysql-5.1.45.tar.gz
> cd mysql-5.1.45
> ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex \
--enable-thread-safe-client --enable-local-infile --enable-shared \
--with-plugins=innobase

> make
> sudo make install

> cd /usr/local/mysql
> sudo ./bin/mysql_install_db --user=mysql
> sudo chown -R mysql ./var
> cd ..

MAMP specific issue

Given that I had installed MAMP previously, I had modified my /etc/my.cnf to specify that the mysql.sock was located in /Applications/MAMP/tmp/mysql/mysql.sock. I modified this line to point to /usr/local/mysql/var/mysql.sock, and then set the sticky bit on the var directory.

> chmod 1777 /usr/local/mysql/var

There are other steps that can be added so that mysqld launches on startup, but I prefer to start it manually when it is needed.

Dealing with a trojan virus on dreamhost

I host a lot of simple sites on Dreamhost.  Imagine my surprise when I went to log into my control panel and was informed that google had listed one of my sites as being a suspected malware site.

The site that it referenced was a very rarely used site, that only housed a custom built app (more of a script than an actual app) so I was puzzled as to how this site could have become infected.

I logged into the host, and did a quick check of the directory structure, and immediately noticed some suspicious things. Read the rest of this entry »

Installing django with MySQL on OS X

I am experimenting with the django web-framework for a few projects at work.  I do the majority of my work in PHP or Java, but occasionally I like to play with Ruby on Rails, and decided that django deserved to have a look as well.

The first step in this process is to get django and the various components installed.

  • Python
  • EasyTools
  • MySql
  • MySqlDB
  • Django

Read the rest of this entry »

Business continuity

Seatbelts, insurance, and fail-safe backups. All things that you don’t completely respect the value of unless you use them.

When I first started working at my consulting firm, they had an eye on continuity, and even had nightly backups to an external hard drive. This was reassuring, but still left something to be desired. First, the router, wireless router, and backup drive were all located precariously close to the coffee maker. It doesn’t take much imagination to envision an employee stumbling in for their morning brew inadvertently taking down the office connectivity, and our backup drive as well.

Read the rest of this entry »