mx can be installed locally for development or testing purposes or on a server. If you're seriously considering supporting a mx installation in your lab or workplace you should have an intermediate to advanced programmer or server admin on your team. Because of the relatively rapid updates to mx we recommend that you should presently use the edge branch.
- MySQL 5.n is in use on development and production servers. Its easiest to install the community addition with the startup item, then reboot.
- There are many examples of how to install and secure MySQL on your machine available on whe world-wide web. If you are using OS X chances are you have a copy installed already (it will need configuration if you haven't already done so).
Mx specific settings
- Typically you add settings to /etc/my.cnf.
- First, check that the value of the `socket` setting matches that provided in /config/database.yml, looking something like this in the .cnf file.
[client] socket = /var/mysql/mysql.sock [mysqld] socket = /var/mysql/mysql.sock
- Second, add the following line under the [mysqld] settings.
[mysqld] max_allowed_packet = 32M
- If you don't already have Ruby (most *nix systems come with it installed) you can find more about it here. Ruby v. 1.8.7 or higher is now required. We recommend building from source. Get the source here.
- Its easiest to install several Ruby packages (including Rails) through the Ruby package manager RubyGems.
IMPORTANT: There are issues with the rubygems > 1.7.2 and mx, the last known rubygem version to work is 1.7.2. This issue (and many others) should disappear when we finish the jump to Rails 3. A possible untested workaround is to use Rails 2.3.12.
Production is now using Rails 2.3.10. Install the required version with the -v flag.
- Do (appending --no-rdoc will speed things up, but not install local documentation):
gem install rails -v=2.3.10 --include-dependencies --no-rdoc
- NOTE: This is optional, and not required for MorphBank images.
- The tools 'convert' and 'identify' must be in your systems PATH, copying them to /usr/bin generally works. You do not need a rubygem hook.
- Ensure that you have created the necessary paths for storing the images.
- If possible install the additional jpg, tiff, png, and gs libraries before installing ImageMagick, this will let you handle additional image formats.
- Used only on a production server.
- If you are running passenger, on CentOS/RHEL 5 servers there is a default daily chron that deletes some necessary passenger files in /tmp/passenger.PID. The easiest way to deal with this is to set the PassengerTempDir in the apache conf to something else, like so:
- Install the required software (see above). There are numerous external sites that will help with installing these software, as such their installation is not documented here.
- Download the mx source and required gems.
- Create the database(s)
- Populate the database with some initial data
- Configure the local environment
- Configure your folders
- Start the server
Download the mx source
The (trunk) branch is now permanently deprecated, ignore it.
For developers or those wanting to see the latest changes an edge branch that should be relatively stable but may contain production restricting commits is here:
svn co https://mx-database.svn.sourceforge.net/svnroot/mx-database/branches/edge your_local_folder_name_here
Several site-specific branches are being added, these are not recommended as a base for new installs but do provide a lot of example code. To grab everything you can just do:
svn co https://mx-database.svn.sourceforge.net/svnroot/mx-database your_local_folder_name_here
Get the required gems
Depending on the checkout you downloaded you might need to install the ruby-debug gem first (note for Ruby 1.9.1 users you will likely need to install the ruby-debug19 gem).
sudo gem install ruby-debug
You need various Ruby gems listed in the environment.rb. The easiest way to install them all is to enter your mx folder (you should see the folders 'app', 'config' etc. if you are in the right place) and type:
sudo rake gems:install
Note that the native mysql gem is nearly always problematic, and you might have to work at getting it installed. You can try:
sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
On RHEL (after yum install mysql-devel) this worked:
gem install mysql -- --with-mysql-config=/usr/lib64/mysql/mysql_config
On Ubuntu 9.10 (see also here) this worked:
sudo apt-get install libmysqlclient-dev sudo gem install mysql
Configuring the database
Create the databases
These instructions follow the defaults included in the database.yml file. Edit that file to change your configuration as necessary.
If you haven't yet create the databases (don't forget the ';' for mysql commands):
mysql -u root -p <enter password> create database mx_test; create database mx_development; create database mx_production;
You'll need to add a MySQL account so that the app can access the database:
GRANT ALL PRIVILEGES ON mx_development.* TO 'mx'@'localhost' IDENTIFIED BY 'MmmXxx';
Repeat the above but swap out the word development for 'test' and 'production'.
Build the tables and populate some initial data
Exit mysql and navigate to the root of your mx install. Create the development database with the rake task (you may need to prefix with 'sudo'):
rake db:migrate RAILS_ENV=development
You can create the production database like so if necessary:
rake db:migrate RAILS_ENV=production
To create the test database do
Anytime the source is updated just repeat the rake db:migrate and your database will be updated if there are changes. There are several rake tasks available for dumping and restoring data, make sure to check them out.
A single user with administrator privileges will have to be manually added to the 'people' tables prior to using mx. Once this user is added additional users can be added from the mx interface.
mysql -u root -p <enter password> use mx_development; insert into people (first_name, last_name, login, password, is_admin, creates_projects) values ('joe', 'smith', 'jsmith', sha1('foosomepwdbar'), 1,1);
- IMPORTANT - you must wrap 'foo' and 'bar' around your password in the above line. In the example above the password for 'jsmith' is 'somepwd' #
While in the MySQL client you'll also want to add a root node to your taxonomic names hierarchy (this assumes the admin you created has id 1).
insert into taxon_names (name, cached_display_name, l, r, creator_id, updator_id) values ('root', 'root', 1, 2, 1, 1);
Importing existing data
If you have access to an existing dump of mx data (it will look something like "2011_08_19_110700.sql") generated by you or an existing mx adminstrator, then you need not do the 'Build the tables and populate some initial data' step. To use this data copy the .sql file mx_root/db/dumps, then do this
rake mx:db:restore_last RAILS_ENV=development
This will both build the database and load your data dump into it.
Configure the mx environment
If you are starting with a new mx, i.e. not a version in production somehwere, you'll need to configure the local environment.
and update the various FOO variables as needed, see comments therein.
You'll need to grab GoogleMaps API keys and add them to BOTH of:
Finally, replace the emails in
ExceptionNotifier.exception_recipients = %w(firstname.lastname@example.org email@example.com)
with those you want e-mails to be sent to when errors are thrown.
Configure your operating system environment
Specific to *nix systems: check the path of your MySQL socket
By default, the path of mysql.sock is set to
However, several distributions do not use this path. To change it edit the file
and replace the 3 occurrences of
by your actual path. For instance in Ubuntu
Configuring file and image storage
Edit the /config/initializers/local_config.rb file and configure the various FILE_PATH variables, for development they can typically be left alone. If left as-is they correspond to the folders that you'll need to create as below:
public/files public/files/images public/files/images/big public/files/images/medium public/files/images/original public/files/images/thumb public/files/pdfs public/files/datasets public/files/chromatograms
On a *nix system you can also use a symbolic link to keep your images, pdfs, and datasets elsewhere.
Test your configurations/environment
This runs the numerous internal tests, it take some time. While you'll typically see a few fail the vast majority should pass. If they do chances are your environment is correctly configured.
Start the server (development)
Try starting the sever, depending on your operating system you may have to set some permission.
Navigate to http://127.0.0.1:3000
You may see the following problems at this point (solution in ).
- schema.rb doesn't exist yet. Run "rake db:migrate" to create it then try again. [Run "rake db:migrate" (and see below).
- Rails Error: Unable to access log file. [Change permissions on the /log folder so that it is writable. In development just do "chmod 755 log". Then, in the log folder, do "echo > development.log", followed by "chmod 666 development.log". If you are on a mac or linux machine you may need to prefix these commands with "sudo".]
If you get a 'Mysql::Error: Got a packet bigger than 'max_allowed_packet' bytes:' you can add the following line to your my.cnf under [mysqld]: 'max_allowed_packet = 32M;'.
Using the server/application
To test/develop in development mode navigate to the root of your installation and type
Open a web browser and browse to
You should see a login page. If you see the mx page but no login fields then you have not correctly added your administrator user.
Once logged in navigate to
to create new projects.
You can also navigate to
to add regular users.
Once you have mx installed upgrading should be relatively straightforward. First, make a backup of both the database and the application, we assume you know where your data reside by this point, and we assume that you know that things can go horribly wrong. After backing up replace the old source with the new (see below for comments). Then, make sure you have the required Rails/Gems (plugins are included in the source already). Finally, run the rake task to update the database like so:
rake db:migrate RAILS_ENV=<development|production>
Its always a good idea to run the test suite as well, this will give you a good idea of what possible problems you might still have.
Production installation follows, for the most part, the same installation process as above. See the Rails homepage for setting up the server. Note that only users with accounts can see data in a clean installation of mx, i.e. you must manually configure the installation to make data available to the public.
If you plan to set up a production installation of mx, it would be a good idea to read chapter 27 of Agile Web Development with Rails, second edition.
Production with no customizations
We don't have Capistrano working, so essentially you'll have to devise your own method of rolling to production, we use an SVN checkout for now.
Production with customizations
If you have begun to build public front ends you know where your custom code resides (/public, /app/models/public, /app/controllers/public, /app/views/public), manage these as you like.
If you plan to use the API functionality you'll need add the following to your virtual .conf: