Tuesday, May 25, 2010

Install adva-cms on Windows

Adva-cms is an open source CMS (Content Management System) platform based on Ruby on Rails. Installing adva on Windows could be a bit tough. Follow is the steps I've tried to get passed:

1. Make sure you already installed ImageMagick and some gems adva requires

2. Just follow adva's installation guide:

# Create your app
rails my-app
cd my-app
rm public/index.html

# Prepare the config/environment.rb and remove the public/index.html
# in config/environment.rb make sure you have:
require File.join(File.dirname(__FILE__), 'boot')
require File.join(File.dirname(__FILE__), '../vendor/adva/engines/adva_cms/boot') # this line

# You *must* use Rails' old routing recognition/generation mode in order for adva-cms to work correctly:
# in config/initializers/new_rails_defaults.rb set:
ActionController::Routing.generate_best_match = true

# Clone the adva-cms ( this might take a bit, grab a coffee meanwhile :) )
git clone git://github.com/svenfuchs/adva_cms.git vendor/adva # or use: git submodule add ...

# Install the core engines and copy the assets
rake adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks # install adva-cms to vendor/plugins/
rake adva:assets:install # symlinks plugin assets to public/

...and get this error

$ rake adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks
(in d:/Document/Projects/AdvaCMS/adva3)
installing engines: adva_activity, adva_blog, adva_cms, adva_comments, adva_rbac, adva_user
rake aborted!
unknown file type: ../adva/engines/adva_activity

(See full trace by running task with --trace)

Let's trace to see why it failed:

$ rake adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks --trace
(in d:/Document/Projects/AdvaCMS/adva3)
** Invoke adva:install:core (first_time)
** Execute adva:install:core
** Invoke adva:install (first_time)
** Execute adva:install
installing engines: adva_activity, adva_blog, adva_cms, adva_comments, adva_rbac, adva_user
rake aborted!
unknown file type: ../adva/engines/adva_activity
c:/Ruby/lib/ruby/1.8/fileutils.rb:1256:in `copy'
c:/Ruby/lib/ruby/1.8/fileutils.rb:451:in `copy_entry'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1325:in `traverse'
c:/Ruby/lib/ruby/1.8/fileutils.rb:448:in `copy_entry'
c:/Ruby/lib/ruby/1.8/fileutils.rb:423:in `cp_r'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1396:in `fu_each_src_dest'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1405:in `fu_each_src_dest0'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1403:in `each'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1403:in `fu_each_src_dest0'
c:/Ruby/lib/ruby/1.8/fileutils.rb:1394:in `fu_each_src_dest'
c:/Ruby/lib/ruby/1.8/fileutils.rb:422:in `cp_r'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:139:in install'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:126:in `send'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:126:in `perform'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:119:in `each'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:119:in `perform'
d:/Document/Projects/AdvaCMS/adva3/vendor/adva/engines/adva_cms/lib/tasks/adva_cms.rake:35

...so there're something wrong in adva_cms.rake file. It took me a while to understand how this file does things and found the lines that caused bugs:

def source(type, subdir = nil)
"../adva/#{type}" + (subdir ? "/#{subdir}" : '')
end

...so maybe this relative path causes confusing. Let's make it full:

def source(type, subdir = nil)
"#{Rails.root}/vendor/adva/#{type}" + (subdir ? "/#{subdir}" : '')
end

$ rake adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks
(in d:/Document/Projects/AdvaCMS/adva3)
installing engines: adva_activity, adva_blog, adva_cms, adva_comments, adva_rbac
, adva_user
installing plugins: adva_cells
c:/Ruby/bin/rake: No such file or directory - which convert
rake aborted!
private method `chomp' called for nil:NilClass

now the engines installed ok, but there's still errors in installing plugins. It caused by paperclip initialization code that uses 'which' command to find path to 'convert' which is a tool provided by paperclip gem but 'which' command does not exist on Windows

d:/Document/Projects/AdvaCMS/adva3/vendor/plugins/adva_cms/config/initializers/p
aperclip.rb:1

Paperclip.options[:command_path] = %x[which convert].chomp.gsub(/convert/, '')

...so just go to ../vendor/adva/engines/adva_cms/config/initializers/paperclip.rb and remove 'which'

Paperclip.options[:command_path] = %x[convert].chomp.gsub(/convert/, '')

then adva's core installation gets passed!

$ rake adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks
(in d:/Document/Projects/AdvaCMS/adva3)
installing engines: adva_activity, adva_blog, adva_cms, adva_comments, adva_rbac
, adva_user
installing plugins: adva_cells
copied 33 migrations to db/migrate
copied 33 migrations to db/migrate/app
copied 33 migrations to db/migrate
== CreateActivitiesTable: migrating ==========================================
-- create_table(:activities, {:force=>true})
-> 0.0050s
== CreateActivitiesTable: migrated (0.0060s) =================================
...

3. Next, install adva's assets and run it up

$ rake adva:assets:install -R vendor/adva/engines/adva_cms/lib/tasks
$ script/server

...and this is what I've got


No comments: