Я работаю над перекрестным средством просмотра браузера для очень больших исторических планов и scetches. Хорошая справка для первых шагов (старый блог) я нашел в http://www.cadmaps.com/gisblog/?p=7 понимать пирамиды изображений (это - то, какая Google Maps работает с).
С 'tiler' я произвожу много изображений как testImage_0001111100.png. 0001111100 т.е. 5-й уровень масштабирования и x / y положение в пирамиде изображений. Большая часть вычисления (соседние изображения, стек изображений вверх и вниз) является сделанной серверной стороной php, названным запросами ajax.
я борюсь в момент с (весьма разрешимыми) проблемами в гладком смещении и изменении масштаба. Это - моя проблема - но прочитайте статью.
ActiveRecord :: Migration
имеет следующий закрытый метод, который вызывается при выполнении миграции:
def ddl_transaction(&block)
if Base.connection.supports_ddl_transactions?
Base.transaction { block.call }
else
block.call
end
end
Как вы можете видеть, это завершит миграцию транзакцией, если соединение поддерживает ее.
В ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter
у вас есть:
def supports_ddl_transactions?
true
end
SQLite версии 2.0 и выше также поддерживает транзакции миграции.
В ActiveRecord :: ConnectionAdapters :: SQLiteAdapter
у вас есть:
def supports_ddl_transactions?
sqlite_version >= '2.0.0'
end
Итак, чтобы пропустить транзакции, вам нужно как-то обойти это. Что-то вроде этого может сработать, хотя я не тестировал его:
class ActiveRecord::Migration
class << self
def no_transaction
@no_transaction = true
end
def no_transaction?
@no_transaction == true
end
end
private
def ddl_transaction(&block)
if Base.connection.supports_ddl_transactions? && !self.class.no_transaction?
Base.transaction { block.call }
else
block.call
end
end
end
Затем вы можете настроить миграцию следующим образом:
class SomeMigration < ActiveRecord::Migration
no_transaction
def self.up
# Do something
end
def self.down
# Do something
end
end