class Dynflow::Rails::Configuration
Attributes
db_pool_size[RW]
the size of db connection pool
eager_load_paths[RW]
lazy_initialization[RW]
pool_size[RW]
the number of threads in the pool handling the execution
rake_tasks_with_executor[RW]
what rake tasks should run their own executor, not depending on the external one
remote[RW]
set true if the executor runs externally (by default true in procution, othewise false)
remote?[RW]
set true if the executor runs externally (by default true in procution, othewise false)
transaction_adapter[RW]
what transaction adapater should be used, by default, it uses the ActiveRecord based adapter, expecting ActiveRecord is used as ORM in the application
Public Class Methods
new()
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 25 def initialize self.pool_size = 5 self.db_pool_size = pool_size + 5 self.remote = ::Rails.env.production? self.transaction_adapter = ::Dynflow::TransactionAdapters::ActiveRecord.new self.eager_load_paths = [] self.lazy_initialization = !::Rails.env.production? self.rake_tasks_with_executor = %w(db:migrate db:seed) @on_init = [] end
Public Instance Methods
action_logger()
click to toggle source
dynflow_logger()
click to toggle source
increase_db_pool_size()
click to toggle source
To avoid pottential timeouts on db connection pool, make sure we have the pool bigger than the thread pool
# File lib/dynflow/rails/configuration.rb, line 83 def increase_db_pool_size if increase_db_pool_size? ::ActiveRecord::Base.connection_pool.disconnect! config = ::ActiveRecord::Base.configurations[::Rails.env] config['pool'] = db_pool_size if config['pool'].to_i < db_pool_size ::ActiveRecord::Base.establish_connection(config) end end
increase_db_pool_size?()
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 77 def increase_db_pool_size? !::Rails.env.test? end
initialize_world(world_class = ::Dynflow::World)
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 57 def initialize_world(world_class = ::Dynflow::World) world_class.new(world_config) end
on_init(&block)
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 49 def on_init(&block) @on_init << block end
rake_task_with_executor?()
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 69 def rake_task_with_executor? return false unless defined?(::Rake) ::Rake.application.top_level_tasks.any? do |rake_task| rake_tasks_with_executor.include?(rake_task) end end
run_on_init_hooks(world)
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 53 def run_on_init_hooks(world) @on_init.each { |init| init.call(world) } end
world_config()
click to toggle source
generates the options hash consumable by the Dynflow's world
# File lib/dynflow/rails/configuration.rb, line 94 def world_config ::Dynflow::Config.new.tap do |config| config.auto_rescue = true config.logger_adapter = ::Dynflow::LoggerAdapters::Delegator.new(action_logger, dynflow_logger) config.pool_size = 5 config.persistence_adapter = initialize_persistence config.transaction_adapter = transaction_adapter config.executor = ->(world, _) { initialize_executor(world) } config.connector = ->(world, _) { initialize_connector(world) } # we can't do any operation until the Rails.application.dynflow.world is set config.auto_execute = false end end
Protected Instance Methods
default_sequel_adapter_options()
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 111 def default_sequel_adapter_options db_config = ::ActiveRecord::Base.configurations[::Rails.env].dup db_config['adapter'] = 'postgres' if db_config['adapter'] == 'postgresql' db_config['max_connections'] = db_pool_size if increase_db_pool_size? if db_config['adapter'] == 'sqlite3' db_config['adapter'] = 'sqlite' database = db_config['database'] unless database == ':memory:' # We need to create separate database for sqlite # to avoid lock conflicts on the database db_config['database'] = "#{File.dirname(database)}/dynflow-#{File.basename(database)}" end end db_config end
initialize_connector(world)
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 136 def initialize_connector(world) ::Dynflow::Connectors::Database.new(world) end
initialize_executor(world)
click to toggle source
# File lib/dynflow/rails/configuration.rb, line 128 def initialize_executor(world) if remote? false else ::Dynflow::Executors::Parallel.new(world, pool_size) end end
initialize_persistence()
click to toggle source
Sequel adapter based on Rails app database.yml configuration
# File lib/dynflow/rails/configuration.rb, line 141 def initialize_persistence ::Dynflow::PersistenceAdapters::Sequel.new(default_sequel_adapter_options) end