Class: Conjure::Service::RailsServer

Inherits:
Object
  • Object
show all
Defined in:
lib/conjure/service/rails_server.rb

Instance Method Summary collapse

Constructor Details

#initialize(target, rails_environment) ⇒ RailsServer

Returns a new instance of RailsServer.



4
5
6
7
# File 'lib/conjure/service/rails_server.rb', line 4

def initialize(target, rails_environment)
  @target = target
  @rails_environment = rails_environment
end

Instance Method Details

#apt_packages_required_for_gemsObject



86
87
88
# File 'lib/conjure/service/rails_server.rb', line 86

def apt_packages_required_for_gems
  ["libpq-dev", "libmysqlclient-dev"]
end

#base_imageObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/conjure/service/rails_server.rb', line 9

def base_image
  @base_image ||= @target.shell.prepare(
    label: "rails_base",
    setup_commands: [
      "apt-get install -y curl git",
      "curl -L https://get.rvm.io | bash -s stable",
      "/usr/local/rvm/bin/rvm install #{ruby_version}",
      "ln -s /usr/local/rvm/rubies/* /usr/local/rvm/default-ruby",
      "bash -c 'source /usr/local/rvm/scripts/rvm; rvm use #{ruby_version}@global --default'",
      "ln -s /usr/local/rvm/rubies/*/lib/ruby/gems/* /usr/local/rvm/gems/default",
      "apt-get install -y #{apt_packages_required_for_gems.join ' '}",
      "echo 'deb http://us.archive.ubuntu.com/ubuntu/ precise universe' >>/etc/apt/sources.list",
      "apt-get install -y python-software-properties software-properties-common",
      "add-apt-repository -y ppa:chris-lea/node.js-legacy",
      "apt-get update",
      "apt-get install -y nodejs",

    ],
    environment: {
      PATH:"/usr/local/rvm/gems/default/bin:/usr/local/rvm/default-ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      RAILS_ENV: @rails_environment,
      GITHUB_TOKEN: ENV["GITHUB_TOKEN"],
      FRECKLE_SUBDOMAIN: "neomind",
    },
    host_volumes: {"/rails_app" => "/application_root"},
  )
end

#database_existsObject



62
63
64
65
# File 'lib/conjure/service/rails_server.rb', line 62

def database_exists
  Log.info "[ rails] Checking the database status"
  base_image.command("cd application_root; bundle exec rake db:version; true").include? "Current version:"
end

#initialize_databaseObject



72
73
74
75
# File 'lib/conjure/service/rails_server.rb', line 72

def initialize_database
  Log.info "[ rails] Setting up the database"
  base_image.command "cd application_root; bundle exec rake db:setup"
end

#install_gemsObject



53
54
55
56
# File 'lib/conjure/service/rails_server.rb', line 53

def install_gems
  Log.info "[ rails] Installing gems"
  base_image.command "cd application_root; bundle --deployment"
end

#migrate_databaseObject



67
68
69
70
# File 'lib/conjure/service/rails_server.rb', line 67

def migrate_database
  Log.info "[ rails] Migrating the database"
  base_image.command "cd application_root; bundle exec rake db:migrate"
end

#restart_serverObject



77
78
79
80
# File 'lib/conjure/service/rails_server.rb', line 77

def restart_server
  server_image.stop
  server_image.run "cd application_root; rm -f tmp/pids/server.pid; bundle exec rails server -p 80"
end

#ruby_versionObject



82
83
84
# File 'lib/conjure/service/rails_server.rb', line 82

def ruby_version
  Conjure.config.file_contents("../.ruby-version").strip
end

#runObject



47
48
49
50
51
# File 'lib/conjure/service/rails_server.rb', line 47

def run
  install_gems
  update_database
  restart_server
end

#server_imageObject



37
38
39
40
41
42
43
44
45
# File 'lib/conjure/service/rails_server.rb', line 37

def server_image
  @server_image ||= base_image.prepare(
    label: "rails_server",
    ports: [80],
    environment: {
      PATH:"/usr/local/rvm/gems/default/bin:/usr/local/rvm/default-ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    },
  )
end

#update_databaseObject



58
59
60
# File 'lib/conjure/service/rails_server.rb', line 58

def update_database
  database_exists ? migrate_database : initialize_database
end