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