Как увеличить размер пула потоков 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
это должно быть оно!