2012-04-06 24 views
16

Thông thường tôi sẽ thiết lập kích thước hồ bơi nhưLàm thế nào để tăng kích thước ActiveRecord bơi thread trên Heroku

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

trong database.yml. Tuy nhiên, heroku thay thế tệp cấu hình. Tôi đang sử dụng girl_friday để làm công việc db nền và cần phải tăng kích thước hồ bơi thread.

Trả lời

27

Chỉ cần thêm thông số truy vấn pool vào DATABASE_URL trong cấu hình heroku của bạn. Để thiết lập kích thước hồ bơi đến 15 trong Heroku một cái gì đó sử dụng ứng dụng của bạn như:

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

+0

đẹp giải pháp :) – bradgonesurfing

+1

Tôi không hiểu làm thế nào hoạt động. 'DATABASE_URL' là một cấu hình được chia sẻ trên tất cả các dynos và người lao động của bạn và không ảnh hưởng đến kích thước nhóm của các quy trình Rails của bạn. Mỗi gói Heroku DB đã có giới hạn kết nối tối đa. Tôi nghi ngờ rằng việc tinh chỉnh URL cơ sở dữ liệu sẽ làm tăng giới hạn đó. –

+1

Bạn nói đúng, nó không làm tăng giới hạn kết nối tối đa cho DB của bạn.Những gì nó làm là nói cho mỗi quá trình để tạo ra hồ bơi riêng của nó có kích thước đó. Vì vậy, nếu DB của bạn có giới hạn tối đa là 20 và bạn có 4 dynos, bạn có thể đặt kích thước hồ bơi là 5. Tuy nhiên, bạn có thể chỉ muốn 4, vì một quy trình tắt (lập lịch, chạy heroku, v.v ...) sẽ cần Kết nối DB quá. – mpoisot

2

Nó không phải là rất thẳng về phía trước nhưng bạn có thể thử tạo buildpack của riêng bạn.

Bạn sẽ nee đến ngã ba: https://github.com/heroku/heroku-buildpack-ruby

Sau đó sửa đổi như sau: https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/ruby.rb#L325-387

Chỉ cần thêm kích thước hồ bơi bạn yêu cầu.

Sau đó, bạn có thể tạo ra một ứng dụng Heroku mới với buildpack tùy chỉnh của bạn:

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

Đó nên là nó!

+2

Đây là Overkill –

3

câu trả lời remvee của được đến trái tim của những gì là cần thiết nhưng vì lệnh của ông gây ra giao diện điều khiển của tôi để treo Tôi nghĩ tôi sẽ viết lên như thế nào để làm điều này bằng tay.

heroku config 

Tìm khóa DATABASE_URL. Ví dụ này cho phép nói nó là:

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

Add "& hồ bơi = 10" vào cuối URL (? Sử dụng & thay vì url đã có một tham số)

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

cho những gì nó có giá trị, bằng cách sử dụng phương pháp params URL như mô tả trong câu trả lời khác ở đây không được khuyến cáo bởi Heroku. Họ có quyền đặt lại hoặc thay đổi URL này bất kỳ lúc nào và lâu dài, hành vi này có thể sẽ bị xóa đối với hành vi tạo Rails.

Đặt thông số bổ sung thông qua gọi lại ứng dụng sau khi khởi tạo là cách được khuyến nghị để sửa đổi cấu hình cơ sở dữ liệu heroku-postgresql per this dev center article của bạn.

Trong 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 
Các vấn đề liên quan