Class: Nginxtra::Actions::Rails::Server

Inherits:
Object
  • Object
show all
Includes:
Nginxtra::Action
Defined in:
lib/nginxtra/actions/rails/server.rb

Instance Method Summary collapse

Methods included from Nginxtra::Action

#daemon, #initialize

Instance Method Details

#basedirObject



63
64
65
# File 'lib/nginxtra/actions/rails/server.rb', line 63

def basedir
  File.absolute_path "tmp/nginxtra"
end

#config_pathObject



67
68
69
# File 'lib/nginxtra/actions/rails/server.rb', line 67

def config_path
  File.absolute_path "tmp/nginxtra.conf.rb"
end

#ensure_in_rails_appObject



21
22
23
24
25
# File 'lib/nginxtra/actions/rails/server.rb', line 21

def ensure_in_rails_app
  unless in_rails_app?
    raise Nginxtra::Error::IllegalState.new "You must be in a rails root directory to run nginxtra_rails."
  end
end

#ensure_server_gem_installedObject



27
28
29
30
31
# File 'lib/nginxtra/actions/rails/server.rb', line 27

def ensure_server_gem_installed
  unless passenger_installed?
    raise Nginxtra::Error::IllegalState.new "Please 'gem install passenger' to continue."
  end
end

#in_rails_app?Boolean

Returns:

  • (Boolean)


75
76
77
78
# File 'lib/nginxtra/actions/rails/server.rb', line 75

def in_rails_app?
  return true if File.exists? "script/rails"
  File.exists?("script/server") && File.exists?("app")
end

#passenger_installed?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/nginxtra/actions/rails/server.rb', line 59

def passenger_installed?
  Gem::Specification.find_by_name("passenger")
end

#serverObject



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/nginxtra/actions/rails/server.rb', line 7

def server
  ensure_in_rails_app
  ensure_server_gem_installed

  begin
    start_verbose_output
    start_nginxtra
    wait_till_finished
  ensure
    stop_verbose_output
    stop_nginxtra
  end
end

#start_nginxtraObject



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/nginxtra/actions/rails/server.rb', line 33

def start_nginxtra
  port = @thor.options["port"]
  environment = @thor.options["environment"]
  @thor.empty_directory "tmp" unless File.directory? "tmp"
  @thor.empty_directory "tmp/nginxtra" unless File.directory? "tmp/nginxtra"
  @thor.create_file config_path, %{nginxtra.simple_config do
  rails :port => #{port}, :environment => "#{environment}"
end
}, :force => true
  @thor.invoke Nginxtra::CLI, ["start"], :basedir => basedir, :config => config_path, :workingdir => workingdir, :"non-interactive" => true
  @thor.say "Listening on http://localhost:#{port}/"
  @thor.say "Environment: #{environment}"
end

#start_verbose_outputObject



80
81
82
83
84
# File 'lib/nginxtra/actions/rails/server.rb', line 80

def start_verbose_output
  return unless @thor.options["verbose"]
  @verbose_run = true
  Thread.new { verbose_thread }
end

#stop_nginxtraObject



55
56
57
# File 'lib/nginxtra/actions/rails/server.rb', line 55

def stop_nginxtra
  @thor.invoke Nginxtra::CLI, ["stop"], :basedir => basedir, :config => config_path, :workingdir => workingdir, :"non-interactive" => true
end

#stop_verbose_outputObject



86
87
88
89
# File 'lib/nginxtra/actions/rails/server.rb', line 86

def stop_verbose_output
  return unless @thor.options["verbose"]
  @verbose_run = false
end

#verbose_threadObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/nginxtra/actions/rails/server.rb', line 91

def verbose_thread
  environment = @thor.options["environment"]
  log_path = "log/#{environment}.log"

  if File.exists? log_path
    log = File.open log_path, "r"
    log.seek 0, IO::SEEK_END
  else
    while @verbose_run
      if File.exists? log_path
        log = File.open log_path, "r"
        break
      end

      sleep 0.1
    end
  end

  while @verbose_run
    select [log]
    line = log.gets

    if line
      puts line
      puts line while(line = log.gets)
    end

    sleep 0.1
  end
ensure
  log.close if log
end

#wait_till_finishedObject



47
48
49
50
51
52
53
# File 'lib/nginxtra/actions/rails/server.rb', line 47

def wait_till_finished
  @thor.say "Ctrl-C or Ctrl-D to shutdown server"
  next until $stdin.getc.nil?
  @thor.say "Captured Ctrl-D..."
rescue Interrupt
  @thor.say "Captured Ctrl-C..."
end

#workingdirObject



71
72
73
# File 'lib/nginxtra/actions/rails/server.rb', line 71

def workingdir
  File.absolute_path "."
end