Installing the Tapestry application » History » Revision 38
Revision 37 (Tom Clegg, 08/12/2013 01:52 PM) → Revision 38/47 (Tom Clegg, 08/12/2013 02:39 PM)
h1. Installing the Tapestry application
* ...or skip down to the [[Installing the Tapestry application#Updating|section about Updating]]
The recommended ruby stack for Tapestry is Ruby Enterprise Edition (1.8.7), installed via rvm.
Install rvm and REE:
<pre>
sudo -i
# curl -L https://get.rvm.io | sudo bash -s stable
# exit
sudo -i
# rvm install ree
# exit
</pre>
Start a new login shell. Make sure RVM is working and @ruby -v@ identifies itself as REE 1.8.7.
rvm use ree
ruby -v
→ *@ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02@*
Install rails.
<pre>
sudo -i
# rvm use ree
# gem install rails
# gem install passenger
# passenger-install-apache2-module
</pre>
Add three lines (provided by passenger-install-apache2-module) and two more lines (see below) to @/etc/apache2/conf.d/passenger.conf@.
<pre>
LoadModule passenger_module /usr/local/rvm/gems/ree-1.8.7-2012.02/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ree-1.8.7-2012.02/gems/passenger-3.0.17
PassengerRuby /usr/local/rvm/wrappers/ree-1.8.7-2012.02/ruby
PassengerUser YOUR_USERNAME_HERE
RackEnv "development"
</pre>
Install some prerequisites for gems.
sudo apt-get install libxslt-dev libxml2-dev
Get a copy of the source tree -- e.g., in /var/www/tapestry
<pre>
cd /var/www
sudo chmod a+w,+t .
git clone git://git.clinicalfuture.com/tapestry.git
sudo chmod go-w,-t .
cd tapestry && git submodule init && git submodule update
</pre>
Then execute:
bundle install
Point a virtualhost to the @public@ dir in your git repo
<pre>
<VirtualHost *:80>
ServerName tapestry.example.org
DocumentRoot /var/www/tapestry/public
<Directory /var/www/tapestry/public>
AllowOverride all
Options -MultiViews
</Directory>
Alias /warehouse /warehouse
<Directory /warehouse>
# This is important; downloads from /warehouse take a long time
# and we do not want to tie up passenger processes with those.
PassengerEnabled off
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
</pre>
Copy @config/database.example@ to @config/database.yml@ and edit to suit. Make sure to select mysql as the database server. Generate a password using @pwgen 12 1@ or @head -c12345 /dev/urandom|md5sum|head -c12;echo@. For example:
development:
adapter: mysql
server: localhost
database: mypg
username: mypg
password: c16fbe415d29
timeout: 5000
Copy @config/environments/development.rb.sample@ to @config/environments/development.rb@ and edit to suit. In particular the ROOT_URL (you may skip the "http://" prefix):
ROOT_URL = 'your.vhost.name'
Generate a secret token with something like
* @ruby -e 'puts rand(2**256).to_s(36)'@
* @head -c1234567 /dev/urandom | sha256sum@
* @pwgen 64 1@
Put the secret token in @config/initializers/secret_token.rb@ like this
Tapestry::Application.configure do
config.secret_token = "40ih46sqyihsiupgwce5u2oirflnor3atgmvzaqeqng42dwa0o"
end
Set up the database:
rake db:setup
rake db:schema:load
Seed the database with a default set of enrollment steps:
rake db:seed_enrollment_steps
Set up data directory (replace USERNAME with the user who owns the GIT directory this code is in, and ROOT_URL matching the one above):
sudo mkdir -p /data/ROOT_URL
sudo chown -R USERNAME:USERNAME /data/ROOT_URL
Set up cron jobs --
1. populate NextHex table regularly (daily is probably ok):
PATH=/usr/local/bin:/usr/bin:/bin
38 0 * * * root (cd /var/www/tapestry/current/script; ./populate_next_hex.rb production 2>/dev/null)
2. Optionally: @/etc/cron.d/tapestry-get-blog-feed@
PATH=/usr/local/bin:/usr/bin:/bin
0 * * * * www-data cd /var/www/tapestry/current/script && ./get-blog-feed.rb development http://blog.personalgenomes.org/feed/
To enable large uploads with warehouse storage:
* @sudo apt-get install runit fuse-utils@
* @sudo mkdir -p /etc/service/whmount/log/main@
* @sudo usermod -a -G fuse www-data@
* Set up supervised whmount service:
<pre>
sudo tee /etc/service/whmount/run <<EOF >/dev/null
#!/bin/sh
modprobe fuse
mkdir -p /warehouse
chown www-data:www-data /warehouse
sudo -u www-data fusermount -u /warehouse
exec sudo -u www-data whmount --no-detach --threaded / /warehouse 2>&1
EOF
sudo chmod +t /etc/service/whmount
sudo chmod +x /etc/service/whmount/run
sudo tee /etc/service/whmount/log/run <<EOF >/dev/null
#!/bin/sh
exec svlogd -tt main
EOF
sudo chmod +x /etc/service/whmount/log/run
</pre>
* Make sure config/environments/development.rb matches your Apache and filesystem mount points:
<pre>
WAREHOUSE_WEB_ROOT = "/warehouse" # Apache alias pointing to whmount target
WAREHOUSE_FS_ROOT = "/warehouse" # whmount target
</pre>
h1. Updating
Pull the latest source tree.
git pull
Install/update gem package dependencies.
bundle install
Bring your database up to the latest release.
rake db:migrate
Tell passenger to reload everything.
mkdir -p tmp
touch tmp/restart.txt