aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile4
-rw-r--r--Gemfile.lock50
-rw-r--r--README.md50
-rw-r--r--config/environments/development.rb2
-rw-r--r--config/environments/production.rb94
-rw-r--r--db/schema.rb70
-rw-r--r--doc/install/jruby.md37
-rw-r--r--doc/install/rvm.md30
8 files changed, 143 insertions, 194 deletions
diff --git a/Gemfile b/Gemfile
index b0372c67b..ea1faa593 100644
--- a/Gemfile
+++ b/Gemfile
@@ -23,7 +23,7 @@ gem 'devise_invitable'
# Map, Geolocalization
gem "map_layers", "0.0.4"
-gem "georuby-ext", :git => 'git://github.com/dryade/georuby-ext.git'
+gem "georuby-ext", "0.0.5"
#gem "georuby-ext", "0.0.2"
# User interface
@@ -52,7 +52,7 @@ gem 'will_paginate', '~> 3.0'
gem 'ransack'
gem 'squeel'
#gem 'ninoxe', :git => 'git://github.com/dryade/ninoxe.git'
-gem 'ninoxe', '0.1.3'
+gem 'ninoxe', '0.1.6'
gem 'acts_as_list', '0.1.6'
gem "acts_as_tree-1.8", '1.1.0', :require => "acts_as_tree"
gem "active_enum"
diff --git a/Gemfile.lock b/Gemfile.lock
index a3bce8308..928a8aa90 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,18 +1,3 @@
-GIT
- remote: git://github.com/dryade/georuby-ext.git
- revision: 69e3460141d831f0ad76780ee2b3f0a925a744f8
- specs:
- georuby-ext (0.0.2)
- activesupport
- dbf
- dr-ffi-proj4 (= 0.0.1)
- ffi-geos (= 0.1.1)
- geokit
- georuby (= 1.9.8)
- json_pure
- nokogiri (= 1.5.10)
- rgeo (= 0.3.20)
-
GEM
remote: http://rubygems.org/
specs:
@@ -93,7 +78,7 @@ GEM
execjs
coffee-script-source (1.3.3)
daemons (1.1.9)
- dbf (2.0.5)
+ dbf (2.0.7)
fastercsv (~> 1.5.4)
delayed_job (3.0.3)
activesupport (~> 3.0)
@@ -111,7 +96,7 @@ GEM
railties (~> 3.0)
diff-lcs (1.2.1)
dr-apartment (0.14.1)
- dr-ffi-proj4 (0.0.1)
+ dr-ffi-proj4 (0.0.3)
ffi (>= 1.0.0)
erubis (2.7.0)
execjs (1.4.0)
@@ -124,17 +109,25 @@ GEM
fastercsv (1.5.5)
ffi (1.0.11)
ffi (1.0.11-java)
- ffi-geos (0.1.1)
+ ffi-geos (0.4.0)
ffi (>= 1.0.0)
font-awesome-sass (4.0.2)
sass-rails (>= 3.1.1)
- foreigner (1.4.0)
+ foreigner (1.6.0)
activerecord (>= 3.0.0)
formtastic (2.2.1)
actionpack (>= 3.0)
- geokit (1.6.5)
- multi_json
- georuby (1.9.8)
+ geokit (1.6.7)
+ multi_json (>= 1.3.2)
+ georuby (2.2.1)
+ georuby-ext (0.0.5)
+ activesupport (>= 3.2.6)
+ dbf
+ dr-ffi-proj4 (>= 0.0.3)
+ ffi-geos (>= 0.1.1)
+ geokit (= 1.6.7)
+ georuby (>= 1.9.8)
+ rgeo (>= 0.3.20)
google-analytics-rails (0.0.4)
gravatar_image_tag (1.1.3)
guard (1.3.2)
@@ -165,7 +158,6 @@ GEM
jruby-rack (>= 1.1.1)
json (1.8.1)
json (1.8.1-java)
- json_pure (1.8.0)
launchy (2.3.0)
addressable (~> 2.3)
libv8 (3.3.10.4)
@@ -190,11 +182,11 @@ GEM
net-ssh (2.6.2)
net-ssh-gateway (1.1.0)
net-ssh (>= 1.99.1)
- ninoxe (0.1.3)
- activerecord (~> 3.1)
+ ninoxe (0.1.6)
+ activerecord (>= 3.1.3, < 3.2.14)
acts_as_list (~> 0.1.6)
- foreigner (= 1.4.0)
- georuby-ext (= 0.0.2)
+ foreigner (= 1.6.0)
+ georuby-ext (= 0.0.5)
nokogiri (1.5.10)
nokogiri (1.5.10-java)
open4 (1.3.0)
@@ -351,7 +343,7 @@ DEPENDENCIES
factory_girl_rails (= 1.7)
font-awesome-sass
formtastic
- georuby-ext!
+ georuby-ext (= 0.0.5)
google-analytics-rails
gravatar_image_tag
guard
@@ -365,7 +357,7 @@ DEPENDENCIES
map_layers (= 0.0.4)
modernizr-rails (~> 2.0.6)
morrisjs-rails
- ninoxe (= 0.1.3)
+ ninoxe (= 0.1.6)
pg (~> 0.11.0)
rabl
rails (= 3.2.6)
diff --git a/README.md b/README.md
index 29540ba20..88b57df6b 100644
--- a/README.md
+++ b/README.md
@@ -27,14 +27,24 @@ This code has been run and tested on [Travis](http://travis-ci.org/afimb/chouett
External Deps
-------------
+If Linux distribution does't publish RVM package,
+install [RVM from sources](./doc/install/rvm.md)
+
+Install ruby 1.9.3
+```sh
+rvm install ruby-1.9.3-p448
+source ~/.rvm/scripts/rvm
+rvm --default use 1.9.3-p448
+```
+
On Debian/Ubuntu/Kubuntu OS : assume depot contains the correct version
+
```sh
sudo apt-get install postgresql
-sudo apt-get install pgadmin3
+sudo apt-get install postgresql-client
sudo apt-get install openjdk-7-jdk
sudo apt-get install git
sudo apt-get install unzip
-sudo apt-get install ruby
sudo apt-get install proj-bin
sudo apt-get install libproj-dev
sudo apt-get install make
@@ -43,18 +53,12 @@ sudo apt-get install make
Installation
------------
-Get git source code :
-```sh
-cd workspace
-git clone -b V2_2 git://github.com/afimb/chouette2
-cd chouette2
-```
-
-The next step assume default path defined by ```Chouette::Command.command``` in file [production.rb](./config/environments/production.rb) is unchanged
-Install chouette-gui-command to import, export and validate transport offer :
+Install chouette-gui-command to import, export and validate transport offer,
+Assume Linux user is myuser and its group mygroup
```sh
sudo mkdir -p /usr/local/opt/chouette-command/
+sudo chown -R myuser:mygroup /usr/local/opt/chouette-command/
cd /usr/local/opt/chouette-command/
wget http://maven.chouette.cityway.fr/fr/certu/chouette/chouette-gui-command/2.2.0/chouette-gui-command-2.2.0.zip
unzip chouette-gui-command-2.2.0.zip
@@ -63,13 +67,25 @@ cd chouette-cmd_2.2.0
sudo chmod a+w .
```
-Create [Postgres database user] (./doc/install/postgresql.md)
+Install web application
-Download gem libraries and create database
+Get git source code :
+```sh
+cd
+git clone -b V2_2 git://github.com/afimb/chouette2
+cd chouette2
+```
+Download gem librairies
```sh
-setenv RAILS_ENV=production
+gem install bundler
bundle install
-bundle exec rake db:create
+```
+Create [Postgres database user] (./doc/install/postgresql.md)
+
+Create database and its schema
+```sh
+RAILS_ENV=production bundle exec rake db:create
+RAILS_ENV=production bundle exec rake apartment:migrate
```
The next step assume default path defined by following settings in file [production.rb](./config/environments/production.rb) are unchanged
@@ -81,7 +97,7 @@ Create directories
sudo mkdir -p /var/lib/chouette/imports
sudo mkdir -p /var/lib/chouette/exports
sudo mkdir -p /var/lib/chouette/validations
-sudo chmod a+x /var/lib/chouette/imports /var/lib/chouette/exports /var/lib/chouette/validations
+sudo chmod a+x /var/lib/chouette/imports /var/lib/chouette/exports
```
Configuration
@@ -128,8 +144,8 @@ Test
----
```sh
-setenv RAILS_ENV=tests
bundle exec rake db:create
+bundle exec rake apartment:migrate
bundle exec rake spec
```
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 8a6eee7d3..9c81d6ddf 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -34,7 +34,7 @@ ChouetteIhm::Application.configure do
# uncomment to show chouette error view in development
#config.consider_all_requests_local = false
- config.active_record.auto_explain_threshold_in_seconds = (RUBY_PLATFORM == "java" ? nil : 0.5)
+ # config.active_record.auto_explain_threshold_in_seconds = (RUBY_PLATFORM == "java" ? nil : 0.5)
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 54d89be28..5253d6e74 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,8 +1,8 @@
ChouetteIhm::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
#
- # # replace this with your production tracker code
- GA.tracker = "UA-xxxxxx-x"
+ # replace this with your production tracker code
+ GA.tracker = "UA-AAAAAAAA"
# Code is not reloaded between requests
config.cache_classes = true
@@ -10,8 +10,6 @@ ChouetteIhm::Application.configure do
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
- # Uncomment to add suburi for your application
- #config.action_controller.relative_url_root = "/chouette2"
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
@@ -25,50 +23,19 @@ ChouetteIhm::Application.configure do
# Generate digests for assets URLs
config.assets.digest = true
- # Defaults to Rails.root.join("public/assets")
- # config.assets.manifest = YOUR_PATH
-
- # Specifies the header that your server uses for sending files
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
-
- # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- # config.force_ssl = true
-
- # See everything in the log (default is :info)
- #config.log_level = :info
-
# Use a different logger for distributed setups
#if ENV['OS'] == 'Windows_NT'
# # args = log_path,number of files,file sizes
# config.logger = Logger.new("C:/chouette/logs/chouette2.log", 5, 10.megabytes)
#else
- require 'syslog_logger'
- config.logger = SyslogLogger.new("rails/chouette2").tap do |logger|
- # logger.level = Logger::INFO
- end
+ require 'syslog_logger'
+ config.logger = SyslogLogger.new("rails/chouette2").tap do |logger|
+ logger.level = Logger::INFO
+ end
#end
-
- # Use a different cache store in production
- # config.cache_store = :mem_cache_store
-
- # Enable serving of images, stylesheets, and JavaScripts from an asset server
- #config.action_controller.asset_host = "chouette2/assets"
- #config.assets.prefix = "/chouette2/assets"
-
- # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
- # config.assets.precompile += %w( search.js )
-
- # Disable delivery errors, bad email addresses will be ignored
- # config.action_mailer.raise_delivery_errors = false
- #
- # api key to geoportail IGN (production key link to public site url referer)
- #config.geoportail_api_key = "bt4z711qv8uw4zmk2bxl4d5l"
-
- # Enable threaded mode
- # NOTICE : With Rails 3.2, Delayed::JRubyWorker blocks the application without threaded mode
- config.threadsafe!
+ # api key to geoportail IGN (production key link to application url root referer)
+ config.geoportail_api_key = "aaaaaaaaaaaaaa"
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
@@ -77,10 +44,10 @@ ChouetteIhm::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
- config.action_mailer.default_url_options = { :host => 'hostname.com' }
+ config.action_mailer.default_url_options = { :host => 'my-domain-name.com' }
# Configure the e-mail address which will be shown in Devise::Maile
- config.mailer_sender = "appli@chouette.mobi"
+ config.mailer_sender = "chouette-production@my-domain-name.com"
# mailer configuration :
# by default : set to smtp on windows platforms and sendmail on unix one
@@ -90,47 +57,28 @@ ChouetteIhm::Application.configure do
# ActionMailer::Base.delivery_method = :smtp
# ActionMailer::Base.smtp_settings = {
# :address => "smtp.sample.com",
- # #:port => 25,
# :domain => "sample.com",
- # #:authentication => :login,
# :user_name => "username",
- # #:password => "password",
- # #:enable_starttls_auto => true,
- # #openssl_verify_mode => # set one in 'none' 'peer' 'client_once' 'fail_if_no_peer_cert'
# }
#else
- ActionMailer::Base.smtp_settings = {
- :address => "smtp.sample.com",
- :port => 25,
- :domain => "sample.com",
- :user_name => "username",
- :password => "password",
- :authentication => "plain"
- }
+ ActionMailer::Base.smtp_settings = {
+ :address => "smtp.samle.com",
+ :domain => "sample.com"
+ }
#end
# file to data for demo
- config.demo_data = "/var/lib/chouette/demo.zip"
+ config.demo_data = "/path/to/demo.zip"
# link to validation specification pages
config.validation_spec = "http://www.chouette.mobi/neptune-validation/v20/"
-
# paths for external resources
- #if ENV['OS'] == 'Windows_NT'
- # config.to_prepare do
- # Devise::Mailer.layout "mailer"
- # Chouette::Command.command = "C:/chouette/chouette-cmd_2.2.0/chouette.bat"
- # ImportTask.root = "C:/chouette/chouette/imports"
- # Export.root = "C:/chouette/chouette/exports"
- # end
- #else
- config.to_prepare do
- Devise::Mailer.layout "mailer"
- Chouette::Command.command = "/usr/local/opt/chouette-command/chouette-cmd_2.2.0/chouette"
- ImportTask.root = "/var/lib/chouette/imports"
- Export.root = "/var/lib/chouette/exports"
- end
- #end
+ config.to_prepare do
+ Devise::Mailer.layout "mailer"
+ Chouette::Command.command = "tmp/chouette-command/chouette"
+ ImportTask.root = "/var/lib/chouette/imports"
+ Export.root = "/var/lib/chouette/exports"
+ end
end
diff --git a/db/schema.rb b/db/schema.rb
index 72f288c1b..0978a437a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -535,59 +535,59 @@ ActiveRecord::Schema.define(:version => 20140207162334) do
add_index "vehicle_journeys", ["objectid"], :name => "vehicle_journeys_objectid_key", :unique => true
add_index "vehicle_journeys", ["route_id"], :name => "index_vehicle_journeys_on_route_id"
- add_foreign_key "access_links", "access_points", :name => "aclk_acpt_fkey", :dependent => :delete
- add_foreign_key "access_links", "stop_areas", :name => "aclk_area_fkey", :dependent => :delete
+ add_foreign_key "access_links", "access_points", name: "aclk_acpt_fkey", dependent: :delete
+ add_foreign_key "access_links", "stop_areas", name: "aclk_area_fkey", dependent: :delete
- add_foreign_key "access_points", "stop_areas", :name => "access_area_fkey", :dependent => :delete
+ add_foreign_key "access_points", "stop_areas", name: "access_area_fkey", dependent: :delete
- add_foreign_key "compliance_check_results", "compliance_check_tasks", :name => "compliance_check_results_compliance_check_task_id_fk", :dependent => :delete
+ add_foreign_key "compliance_check_results", "compliance_check_tasks", name: "compliance_check_results_compliance_check_task_id_fk", dependent: :delete
- add_foreign_key "compliance_check_tasks", "import_tasks", :name => "compliance_check_tasks_import_task_id_fk", :dependent => :delete
- add_foreign_key "compliance_check_tasks", "referentials", :name => "compliance_check_tasks_referential_id_fk", :dependent => :delete
+ add_foreign_key "compliance_check_tasks", "import_tasks", name: "compliance_check_tasks_import_task_id_fk", dependent: :delete
+ add_foreign_key "compliance_check_tasks", "referentials", name: "compliance_check_tasks_referential_id_fk", dependent: :delete
- add_foreign_key "connection_links", "stop_areas", :name => "colk_endarea_fkey", :column => "arrival_id", :dependent => :delete
- add_foreign_key "connection_links", "stop_areas", :name => "colk_startarea_fkey", :column => "departure_id", :dependent => :delete
+ add_foreign_key "connection_links", "stop_areas", name: "colk_endarea_fkey", column: "arrival_id", dependent: :delete
+ add_foreign_key "connection_links", "stop_areas", name: "colk_startarea_fkey", column: "departure_id", dependent: :delete
- add_foreign_key "group_of_lines_lines", "group_of_lines", :name => "groupofline_group_fkey", :dependent => :delete
- add_foreign_key "group_of_lines_lines", "lines", :name => "groupofline_line_fkey", :dependent => :delete
+ add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", dependent: :delete
+ add_foreign_key "group_of_lines_lines", "lines", name: "groupofline_line_fkey", dependent: :delete
- add_foreign_key "import_tasks", "referentials", :name => "import_tasks_referential_id_fk", :dependent => :delete
+ add_foreign_key "import_tasks", "referentials", name: "import_tasks_referential_id_fk", dependent: :delete
- add_foreign_key "journey_patterns", "routes", :name => "jp_route_fkey", :dependent => :delete
- add_foreign_key "journey_patterns", "stop_points", :name => "arrival_point_fkey", :column => "arrival_stop_point_id", :dependent => :nullify
- add_foreign_key "journey_patterns", "stop_points", :name => "departure_point_fkey", :column => "departure_stop_point_id", :dependent => :nullify
+ add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", dependent: :delete
+ add_foreign_key "journey_patterns", "stop_points", name: "arrival_point_fkey", column: "arrival_stop_point_id", dependent: :nullify
+ add_foreign_key "journey_patterns", "stop_points", name: "departure_point_fkey", column: "departure_stop_point_id", dependent: :nullify
- add_foreign_key "journey_patterns_stop_points", "journey_patterns", :name => "jpsp_jp_fkey", :dependent => :delete
- add_foreign_key "journey_patterns_stop_points", "stop_points", :name => "jpsp_stoppoint_fkey", :dependent => :delete
+ add_foreign_key "journey_patterns_stop_points", "journey_patterns", name: "jpsp_jp_fkey", dependent: :delete
+ add_foreign_key "journey_patterns_stop_points", "stop_points", name: "jpsp_stoppoint_fkey", dependent: :delete
- add_foreign_key "lines", "companies", :name => "line_company_fkey", :dependent => :nullify
- add_foreign_key "lines", "networks", :name => "line_ptnetwork_fkey", :dependent => :nullify
+ add_foreign_key "lines", "companies", name: "line_company_fkey", dependent: :nullify
+ add_foreign_key "lines", "networks", name: "line_ptnetwork_fkey", dependent: :nullify
- add_foreign_key "routes", "lines", :name => "route_line_fkey", :dependent => :delete
+ add_foreign_key "routes", "lines", name: "route_line_fkey", dependent: :delete
- add_foreign_key "routing_constraints_lines", "lines", :name => "routingconstraint_line_fkey", :dependent => :delete
- add_foreign_key "routing_constraints_lines", "stop_areas", :name => "routingconstraint_stoparea_fkey", :dependent => :delete
+ add_foreign_key "routing_constraints_lines", "lines", name: "routingconstraint_line_fkey", dependent: :delete
+ add_foreign_key "routing_constraints_lines", "stop_areas", name: "routingconstraint_stoparea_fkey", dependent: :delete
- add_foreign_key "stop_areas", "stop_areas", :name => "area_parent_fkey", :column => "parent_id", :dependent => :nullify
+ add_foreign_key "stop_areas", "stop_areas", name: "area_parent_fkey", column: "parent_id", dependent: :nullify
- add_foreign_key "stop_areas_stop_areas", "stop_areas", :name => "stoparea_child_fkey", :column => "child_id", :dependent => :delete
- add_foreign_key "stop_areas_stop_areas", "stop_areas", :name => "stoparea_parent_fkey", :column => "parent_id", :dependent => :delete
+ add_foreign_key "stop_areas_stop_areas", "stop_areas", name: "stoparea_child_fkey", column: "child_id", dependent: :delete
+ add_foreign_key "stop_areas_stop_areas", "stop_areas", name: "stoparea_parent_fkey", column: "parent_id", dependent: :delete
- add_foreign_key "stop_points", "routes", :name => "stoppoint_route_fkey", :dependent => :delete
- add_foreign_key "stop_points", "stop_areas", :name => "stoppoint_area_fkey"
+ add_foreign_key "stop_points", "routes", name: "stoppoint_route_fkey", dependent: :delete
+ add_foreign_key "stop_points", "stop_areas", name: "stoppoint_area_fkey"
- add_foreign_key "time_table_dates", "time_tables", :name => "tm_date_fkey", :dependent => :delete
+ add_foreign_key "time_table_dates", "time_tables", name: "tm_date_fkey", dependent: :delete
- add_foreign_key "time_table_periods", "time_tables", :name => "tm_period_fkey", :dependent => :delete
+ add_foreign_key "time_table_periods", "time_tables", name: "tm_period_fkey", dependent: :delete
- add_foreign_key "time_tables_vehicle_journeys", "time_tables", :name => "vjtm_tm_fkey", :dependent => :delete
- add_foreign_key "time_tables_vehicle_journeys", "vehicle_journeys", :name => "vjtm_vj_fkey", :dependent => :delete
+ add_foreign_key "time_tables_vehicle_journeys", "time_tables", name: "vjtm_tm_fkey", dependent: :delete
+ add_foreign_key "time_tables_vehicle_journeys", "vehicle_journeys", name: "vjtm_vj_fkey", dependent: :delete
- add_foreign_key "vehicle_journey_at_stops", "stop_points", :name => "vjas_sp_fkey", :dependent => :delete
- add_foreign_key "vehicle_journey_at_stops", "vehicle_journeys", :name => "vjas_vj_fkey", :dependent => :delete
+ add_foreign_key "vehicle_journey_at_stops", "stop_points", name: "vjas_sp_fkey", dependent: :delete
+ add_foreign_key "vehicle_journey_at_stops", "vehicle_journeys", name: "vjas_vj_fkey", dependent: :delete
- add_foreign_key "vehicle_journeys", "companies", :name => "vj_company_fkey", :dependent => :nullify
- add_foreign_key "vehicle_journeys", "journey_patterns", :name => "vj_jp_fkey", :dependent => :delete
- add_foreign_key "vehicle_journeys", "routes", :name => "vj_route_fkey", :dependent => :delete
+ add_foreign_key "vehicle_journeys", "companies", name: "vj_company_fkey", dependent: :nullify
+ add_foreign_key "vehicle_journeys", "journey_patterns", name: "vj_jp_fkey", dependent: :delete
+ add_foreign_key "vehicle_journeys", "routes", name: "vj_route_fkey", dependent: :delete
end
diff --git a/doc/install/jruby.md b/doc/install/jruby.md
deleted file mode 100644
index ff3cb9024..000000000
--- a/doc/install/jruby.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Install JRuby 1.6.8
-
-Download JRuby on http://www.jruby.org/download
-```sh
-mkdir application
-```
-Copy jruby-bin-1.6.8.tar.gz in application
-```sh
-cd application
-tar xfz jruby-bin-1.6.8.tar.gz
-```
-Create a repository jruby-1.6.8
-```sh
-ln -s jruby-1.6.8 jruby
-```
-
-Add to path application/jruby/bin
-```sh
-cd
-vi .profile
-```
-Add this in the file :
-```sh
-if [ -d "$HOME/application/jruby/bin" ] ; then
- PATH="$HOME/application/jruby/bin":$PATH
-fi
-```
-
-Apply Profile
-```sh
-. .profile
-```
-
-Test JRuby
-```sh
-jruby -v
-``` \ No newline at end of file
diff --git a/doc/install/rvm.md b/doc/install/rvm.md
new file mode 100644
index 000000000..163347c56
--- /dev/null
+++ b/doc/install/rvm.md
@@ -0,0 +1,30 @@
+# Install RVM
+
+If no package is available, install from sources
+
+Setup from sources
+------------------
+
+follow procedure described by [that post](http://toddmahoney.com/post/65020455496/ubuntu-13-10-installing-rvm-ruby)
+
+```sh
+sudo apt-get update
+
+sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config libgdbm-dev libffi-dev libreadline-dev
+
+curl -L https://get.rvm.io | bash -s stable
+
+echo ‘source ~/.rvm/scripts/rvm’ » ~/.bash_aliases && bash
+```
+
+Test
+----
+
+```sh
+type rvm | head -n 1
+```
+and if you get
+```sh
+rvm is a function
+```
+installation is ok