Make database offline mode work
This commit is contained in:
parent
f980e7e4a6
commit
8af14faa49
8 changed files with 106 additions and 84 deletions
|
@ -51,7 +51,9 @@ Rails::Initializer.run do |config|
|
|||
# config.gem "bj"
|
||||
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
|
||||
# config.gem "aws-s3", :lib => "aws/s3"
|
||||
config.gem 'composite_primary_keys', :version => '2.2.2'
|
||||
unless OSM_STATUS == :database_offline
|
||||
config.gem 'composite_primary_keys', :version => '2.2.2'
|
||||
end
|
||||
config.gem 'libxml-ruby', :version => '>= 1.1.1', :lib => 'libxml'
|
||||
config.gem 'rmagick', :lib => 'RMagick'
|
||||
config.gem 'oauth', :version => '>= 0.3.6'
|
||||
|
@ -86,7 +88,9 @@ Rails::Initializer.run do |config|
|
|||
# Use the database for sessions instead of the cookie-based default,
|
||||
# which shouldn't be used to store highly confidential information
|
||||
# (create the session table with 'rake db:sessions:create')
|
||||
config.action_controller.session_store = :sql_session_store
|
||||
unless OSM_STATUS == :database_offline
|
||||
config.action_controller.session_store = :sql_session_store
|
||||
end
|
||||
|
||||
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
||||
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class AbstractAdapter
|
||||
protected
|
||||
alias_method :old_log, :log
|
||||
if defined?(ActionRecord::ConnectionAdaptors::AbstractAdaptor)
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class AbstractAdapter
|
||||
protected
|
||||
alias_method :old_log, :log
|
||||
|
||||
def log(sql, name)
|
||||
if block_given?
|
||||
old_log(sql, name) do
|
||||
yield
|
||||
def log(sql, name)
|
||||
if block_given?
|
||||
old_log(sql, name) do
|
||||
yield
|
||||
end
|
||||
else
|
||||
old_log(sql, name)
|
||||
end
|
||||
rescue ActiveRecord::StatementInvalid => ex
|
||||
if ex.message =~ /^OSM::APITimeoutError: /
|
||||
raise OSM::APITimeoutError.new
|
||||
elsif ex.message =~ /^Timeout::Error: /
|
||||
raise Timeout::Error.new("time's up!")
|
||||
else
|
||||
raise
|
||||
end
|
||||
else
|
||||
old_log(sql, name)
|
||||
end
|
||||
rescue ActiveRecord::StatementInvalid => ex
|
||||
if ex.message =~ /^OSM::APITimeoutError: /
|
||||
raise OSM::APITimeoutError.new
|
||||
elsif ex.message =~ /^Timeout::Error: /
|
||||
raise Timeout::Error.new("time's up!")
|
||||
else
|
||||
raise
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,54 +1,56 @@
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class PostgreSQLAdapter
|
||||
def pk_and_sequence_for(table)
|
||||
# First try looking for a sequence with a dependency on the
|
||||
# given table's primary key.
|
||||
result = query(<<-end_sql, 'PK and serial sequence')[0]
|
||||
SELECT attr.attname, seq.relname
|
||||
FROM pg_class seq,
|
||||
pg_attribute attr,
|
||||
pg_depend dep,
|
||||
pg_namespace name,
|
||||
pg_constraint cons
|
||||
WHERE seq.oid = dep.objid
|
||||
AND seq.relkind = 'S'
|
||||
AND attr.attrelid = dep.refobjid
|
||||
AND attr.attnum = dep.refobjsubid
|
||||
AND attr.attrelid = cons.conrelid
|
||||
AND attr.attnum = cons.conkey[1]
|
||||
AND cons.contype = 'p'
|
||||
AND dep.classid = '"pg_class"'::regclass
|
||||
AND dep.refclassid = '"pg_class"'::regclass
|
||||
AND dep.refobjid = '#{quote_table_name(table)}'::regclass
|
||||
end_sql
|
||||
|
||||
if result.nil? or result.empty?
|
||||
# If that fails, try parsing the primary key's default value.
|
||||
# Support the 7.x and 8.0 nextval('foo'::text) as well as
|
||||
# the 8.1+ nextval('foo'::regclass).
|
||||
result = query(<<-end_sql, 'PK and custom sequence')[0]
|
||||
SELECT attr.attname,
|
||||
CASE
|
||||
WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN
|
||||
substr(split_part(def.adsrc, '''', 2),
|
||||
strpos(split_part(def.adsrc, '''', 2), '.')+1)
|
||||
ELSE split_part(def.adsrc, '''', 2)
|
||||
END
|
||||
FROM pg_class t
|
||||
JOIN pg_attribute attr ON (t.oid = attrelid)
|
||||
JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
|
||||
JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
|
||||
WHERE t.oid = '#{quote_table_name(table)}'::regclass
|
||||
AND cons.contype = 'p'
|
||||
AND def.adsrc ~* 'nextval'
|
||||
if defined?(ActionRecord::ConnectionAdaptors::PostgreSQLAdaptor)
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class PostgreSQLAdapter
|
||||
def pk_and_sequence_for(table)
|
||||
# First try looking for a sequence with a dependency on the
|
||||
# given table's primary key.
|
||||
result = query(<<-end_sql, 'PK and serial sequence')[0]
|
||||
SELECT attr.attname, seq.relname
|
||||
FROM pg_class seq,
|
||||
pg_attribute attr,
|
||||
pg_depend dep,
|
||||
pg_namespace name,
|
||||
pg_constraint cons
|
||||
WHERE seq.oid = dep.objid
|
||||
AND seq.relkind = 'S'
|
||||
AND attr.attrelid = dep.refobjid
|
||||
AND attr.attnum = dep.refobjsubid
|
||||
AND attr.attrelid = cons.conrelid
|
||||
AND attr.attnum = cons.conkey[1]
|
||||
AND cons.contype = 'p'
|
||||
AND dep.classid = '"pg_class"'::regclass
|
||||
AND dep.refclassid = '"pg_class"'::regclass
|
||||
AND dep.refobjid = '#{quote_table_name(table)}'::regclass
|
||||
end_sql
|
||||
end
|
||||
|
||||
# [primary_key, sequence]
|
||||
[result.first, result.last]
|
||||
rescue
|
||||
nil
|
||||
if result.nil? or result.empty?
|
||||
# If that fails, try parsing the primary key's default value.
|
||||
# Support the 7.x and 8.0 nextval('foo'::text) as well as
|
||||
# the 8.1+ nextval('foo'::regclass).
|
||||
result = query(<<-end_sql, 'PK and custom sequence')[0]
|
||||
SELECT attr.attname,
|
||||
CASE
|
||||
WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN
|
||||
substr(split_part(def.adsrc, '''', 2),
|
||||
strpos(split_part(def.adsrc, '''', 2), '.')+1)
|
||||
ELSE split_part(def.adsrc, '''', 2)
|
||||
END
|
||||
FROM pg_class t
|
||||
JOIN pg_attribute attr ON (t.oid = attrelid)
|
||||
JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
|
||||
JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
|
||||
WHERE t.oid = '#{quote_table_name(table)}'::regclass
|
||||
AND cons.contype = 'p'
|
||||
AND def.adsrc ~* 'nextval'
|
||||
end_sql
|
||||
end
|
||||
|
||||
# [primary_key, sequence]
|
||||
[result.first, result.last]
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
module QueryCache
|
||||
private
|
||||
def cache_sql(sql)
|
||||
yield
|
||||
end
|
||||
if defined?(ActionRecord::ConnectionAdaptors::QueryCache)
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
module QueryCache
|
||||
private
|
||||
def cache_sql(sql)
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,4 +4,6 @@ adapter = Rails.configuration.database_configuration[environment]["adapter"]
|
|||
session_class = adapter + "_session"
|
||||
|
||||
# Configure SqlSessionStore
|
||||
SqlSessionStore.session_class = session_class.camelize.constantize
|
||||
unless OSM_STATUS == :database_offline
|
||||
SqlSessionStore.session_class = session_class.camelize.constantize
|
||||
end
|
||||
|
|
5
vendor/plugins/deadlock_retry/init.rb
vendored
5
vendor/plugins/deadlock_retry/init.rb
vendored
|
@ -1,2 +1,5 @@
|
|||
require 'deadlock_retry'
|
||||
ActiveRecord::Base.send :include, DeadlockRetry
|
||||
|
||||
if defined?(ActionRecord::Base)
|
||||
ActiveRecord::Base.send :include, DeadlockRetry
|
||||
end
|
||||
|
|
11
vendor/plugins/file_column/init.rb
vendored
11
vendor/plugins/file_column/init.rb
vendored
|
@ -8,6 +8,11 @@ require 'file_column_helper'
|
|||
require 'validations'
|
||||
require 'test_case'
|
||||
|
||||
ActiveRecord::Base.send(:include, FileColumn)
|
||||
ActionView::Base.send(:include, FileColumnHelper)
|
||||
ActiveRecord::Base.send(:include, FileColumn::Validations)
|
||||
if defined?(ActionRecord::Base)
|
||||
ActiveRecord::Base.send(:include, FileColumn)
|
||||
ActiveRecord::Base.send(:include, FileColumn::Validations)
|
||||
end
|
||||
|
||||
if defined?(ActionView::Base)
|
||||
ActionView::Base.send(:include, FileColumnHelper)
|
||||
end
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
require 'validates_email_format_of'
|
||||
if defined?(ActionRecord::Base)
|
||||
require 'validates_email_format_of'
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue