Я использую rails 5.2.1 приложение на сервере ec2 типа экземпляра t3.small . Но сервер завис после нескольких дней работы. В файле puma_access.log есть следующий журнал ошибок
Listen loop error: #<ThreadError: can't create Thread: Resource temporarily unavailable>
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `initialize'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `new'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:87:in `spawn_thread'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:162:in `block in <<'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:154:in `synchronize'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:154:in `<<'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:398:in `block in handle_servers'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:385:in `each'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:385:in `handle_servers'
/var/www/rails/rails-api/shared/bundle/ruby/2.5.0/gems/puma-3.12.0/lib/puma/server.rb:358:in `block in run'
На сервере мы подключаемся к двум экземплярам RDS, второй с помощью класса
class SecondDbBase < ActiveRecord::Base
establish_connection "#{Rails.env}_sec".to_sym
self.abstract_class = true
def readonly?
true
end
def write_attribute(name, value)
raise NotImplementedError, 'read only table'
end
end
и в соответствующей модели я расширил класс
class Student < SecondDbBase
файл puma.rb
workers 1
# Min and Max threads per worker
threads 1, 6
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
tmp_dir = "#{app_dir}/tmp"
# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env
# Set up socket location
bind "unix://#{tmp_dir}/sockets/puma.sock"
# Logging
stdout_redirect "#{tmp_dir}/log/puma.stdout.log", "#{tmp_dir}/log/puma.stderr.log", true
# Set master PID and state locations
pidfile "#{tmp_dir}/pids/puma.pid"
state_path "#{tmp_dir}/pids/puma.state"
preload_app!
activate_control_app
on_worker_boot do
require "active_record"
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end
Связана ли проблема с каким-либо пулом соединений с базой данных? Как я могу решить это?