Skip to content
Extraits de code Groupes Projets
Valider 907f71c7 rédigé par Dennis Schubert's avatar Dennis Schubert
Parcourir les fichiers

Merge pull request #5463 from jhass/deferred_gc

Drop deferred GC and cleanup features/support
parents 60a5d2a5 c7047fbe
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
# disable_referential_integrity doesn't work when using PostgreSQL
# with a non-root user.
# See http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error
module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter < AbstractAdapter
def disable_referential_integrity(&block)
transaction {
begin
execute "SET CONSTRAINTS ALL DEFERRED"
yield
ensure
execute "SET CONSTRAINTS ALL IMMEDIATE"
end
}
end
end
end
end
......@@ -45,7 +45,6 @@ DatabaseCleaner.strategy = :truncation
DatabaseCleaner.orm = "active_record"
Cucumber::Rails::World.use_transactional_fixtures = false
require File.join(File.dirname(__FILE__), "database_cleaner_patches")
require File.join(File.dirname(__FILE__), "integration_sessions_controller")
require File.join(File.dirname(__FILE__), "poor_mans_webmock")
......@@ -62,39 +61,3 @@ include HelperMethods
Before do
Devise.mailer.deliveries = []
end
After do
if Capybara.current_session.driver.respond_to?(:browser)
Capybara.reset_sessions!
# Capybara.current_session.driver.browser.manage.delete_all_cookies
end
end
Before('@localserver') do
TestServerFixture.start_if_needed
CapybaraSettings.instance.save
Capybara.current_driver = :selenium
Capybara.run_server = false
end
After('@localserver') do
CapybaraSettings.instance.restore
end
# give firefox more time to complete requests
# http://ihswebdesign.com/knowledge-base/fixing-selenium-timeouterror/
After do |scenario|
if scenario.exception.is_a? Timeout::Error
# restart Selenium driver
Capybara.send(:session_pool).delete_if { |key, value| key =~ /selenium/i }
end
end
# # https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection
# require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "deferred_garbage_collection")
# Before do
# DeferredGarbageCollection.start
# end
# After do
# DeferredGarbageCollection.reconsider
# end
ENV["RAILS_ENV"] ||= "test"
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') unless defined?(Rails)
require 'timeout'
require 'socket'
require 'singleton'
require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'
class TestServerFixture
# simple interface to script/server
def self.is_port_open(host, port, tries)
for i in (1..tries)
begin
Timeout::timeout(2) do
begin
s = TCPSocket.new(host, port)
s.close
return true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
sleep( 2)
end
end
rescue Timeout::Error
return false
end
end
return false
end
def self.start_if_needed
unless TestServerFixture.is_port_open( "localhost", 3000, 2)
system( "script/server -d")
if TestServerFixture.is_port_open( "localhost", 3000, 30)
puts "script/server started"
else
puts "Error: can't start script/server"
end
end
end
end
class CapybaraSettings
# simple save/restore for Capybara
include Singleton
def save
begin
@run_server = Capybara.run_server
@driver = Capybara.current_driver
@host = Capybara.app_host
rescue => e
puts "Saving exception: " + e.inspect
end
end
def restore
begin
Capybara.current_driver = @driver
Capybara.app_host = @host
Capybara.run_server = @run_server
rescue => e
puts "Restore exception: " + e.inspect
end
end
end
......@@ -92,13 +92,3 @@ RSpec.configure do |config|
AppConfig.reset_dynamic!
end
end
# https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection
RSpec.configure do |config|
config.before(:all) do
DeferredGarbageCollection.start
end
config.after(:all) do
DeferredGarbageCollection.reconsider
end
end
# https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection
class DeferredGarbageCollection
DEFERRED_GC_THRESHOLD = (ENV['DEFER_GC'] || 10.0).to_f #used to be 10.0
@@last_gc_run = Time.now
def self.start
return if unsupported_environment
GC.disable if DEFERRED_GC_THRESHOLD > 0
end
def self.memory_threshold
@mem = %x(free 2>/dev/null).to_s.split(" ")
return nil if @mem.empty?
@mem[15].to_i / (@mem[7].to_i/100)
end
def self.reconsider
return if unsupported_environment
if (percent_used = self.memory_threshold)
running_out_of_memory = percent_used > 90
else
running_out_of_memory = false
end
if( (DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD) || running_out_of_memory )
GC.enable
GC.start
GC.disable
@@last_gc_run = Time.now
end
end
def self.unsupported_environment
ENV['TRAVIS'] # TODO: enable for ruby 1.9.3 or more RAM
end
end
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter