Как увеличить размер пула потоков ActiveRecord на heroku

обычно я бы установил размер бассейн

development:
  adapter: postgresql
  encoding: unicode
  database: openkitchen_development
  username: rails
  host: localhost
  pool: 10
  password:

в базе данных.в формате YML. Однако heroku заменяет файл конфигурации. Я использую girl_friday для сделайте фоновую работу БД и увеличьте размер пула потоков.

5 ответов


добавить pool запрос параметр DATABASE_URL в конфигурации heroku. Чтобы установить размер пула до 15 в приложении heroku, используйте что-то вроде:

heroku config -s | awk '/^DATABASE_URL=/{print "?pool=15"}' | xargs heroku config:add


для чего это стоит, использование метода url params, как описано в других ответах здесь, не рекомендуется Heroku. Они оставляют за собой право сбросить или изменить этот URL-адрес в любое время, и в долгосрочной перспективе это поведение, вероятно, будет удалено для поведения сборки Rails.

установка дополнительных параметров с помощью обратного вызова приложения после инициализации является рекомендуемым способом изменения конфигурации баз данных heroku-postgresql в этом центре разработки статья.

в config/initializers / database_connection.rb:

Rails.application.config.after_initialize do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = Rails.application.config.database_configuration[Rails.env]
    config['pool']              = 10
    ActiveRecord::Base.establish_connection(config)
  end
end

Heroku теперь имеет хорошую статью об управлении размерами пула - https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-pool


ответ ремви попадает в самое сердце того, что нужно, но поскольку его команда заставила мою консоль зависнуть, я подумал, что напишу, как это сделать вручную.

heroku config

найдите ключ DATABASE_URL. Для этого примера скажем, что это:

DATABASE_URL:            mysql2://something.example.com/stuff?reconnect=true

добавить "& pool=10 " в конец URL-адреса (использовать & вместо ? потому что url уже имеет параметр)

heroku config:add DATABASE_URL=mysql2://something.example.com/stuff?reconnect=true&pool=10

Это не очень прямо вперед, но вы можете попробовать создать свой собственный buildpack-пакет.

вам придется раскошелиться: https://github.com/heroku/heroku-buildpack-ruby

затем измените следующие: https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/ruby.rb#L325-387

просто добавьте требуемый размер пула.

затем вы можете создать новое приложение Heroku с вашим пользовательским buildpack-пакет:

heroku create --stack cedar --buildpack https://github.com/yourgithubusername/heroku-buildpack-ruby.git

это должно быть оно!