lib/pgtk/pgsql_task.rb in pgtk-0.7.4 vs lib/pgtk/pgsql_task.rb in pgtk-0.7.5

- old
+ new

@@ -41,18 +41,20 @@ attr_accessor :user attr_accessor :password attr_accessor :dbname attr_accessor :yaml attr_accessor :quiet + attr_accessor :port def initialize(*args, &task_block) @name = args.shift || :pgsql @fresh_start = false @quite = false @user = 'test' @password = 'test' @dbname = 'test' + @port = nil unless ::Rake.application.last_description desc 'Start a local PostgreSQL server' end task(name, *args) do |_, task_args| RakeFileUtils.send(:verbose, true) do @@ -86,12 +88,19 @@ out ].join(' ') ) end raise unless $CHILD_STATUS.exitstatus.zero? - port = RandomPort::Pool.new.acquire + port = @port + if port.nil? + port = RandomPort::Pool::SINGLETON.acquire + puts "Random TCP port #{port} is used" + else + puts "Required TCP port #{port} is used" + end pid = Process.spawn('postgres', '-k', home, '-D', home, "--port=#{port}") + IO.write(File.join(@dir, 'pid'), pid) at_exit do `kill -TERM #{pid}` puts "PostgreSQL killed in PID #{pid}" end sleep 1 @@ -128,8 +137,8 @@ "#{CGI.escape(@dbname)}?user=#{CGI.escape(@user)}" ].join } }.to_yaml ) - puts "PostgreSQL is running in PID #{pid}" + puts "PostgreSQL has been started in process ##{pid}, port #{port}" end end