У меня есть приложение Rails со следующей конфигурацией
Rails: 5.2.0
Ruby: 6.2.3
Puma: 4.0
Я настроил стратегию развертывания, используя Capistrano
. Я могу развернуть на сервере, используя Capistrano
. Но я столкнулся с одной странной проблемой при запуске сервера puma.
при запуске сервера puma я получаю эту ошибку ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
Я перепроверил файл database.yml
адаптер указан правильно, а также нет проблем с выравниванием с файлом yml
.
вот журнал, который я получаю при запуске сервера puma
[9141] ! Unable to load application: ActiveRecord::AdapterNotSpecified: database
configuration does not specify adapter
bundler: failed to load command: puma
(/var/www/xxxxx/shared/bundle/ruby/2.6.0/bin/puma)
ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
/var/www/xxx/shared/bundle/ruby/2.6.0/gems/activerecord-
5.2.4.3/lib/active_record/connection_adapters/connection_specification.rb:184:in `spec'
Puma.rb
#!/usr/bin/env puma
directory '/var/www/xxxx/current'
rackup "/var/www/xxxx/current/config.ru"
environment 'dev'
tag ''
pidfile "/var/www/xxxx/shared/tmp/pids/puma.pid"
state_path "/var/www/xxxx/shared/tmp/pids/puma.state"
stdout_redirect '/var/www/xxxx/current/log/puma.access.log', '/var/www/xxxx/current/log/puma.error.log', true
threads 4,16
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
bind 'unix:///var/www/xxxx/shared/tmp/sockets/puma_xxxx.sock'
workers 1
restart_command 'bundle exec puma'
preload_app!
on_restart do
puts 'Refreshing Gemfile'
ENV["BUNDLE_GEMFILE"] = "/var/www/xxxx/current/Gemfile"
end
before_fork do
ActiveRecord::Base.connection_pool.disconnect!
end
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection(config)
end
end
Я предполагаю, что может возникнуть проблема с работником, когда он пытается подключиться к базе данных. Поэтому я изменил свой puma.rb
, который нашел в других документах.
Обновлен puma.rb
#!/usr/bin/env puma
# Change to match your CPU core count
workers 1
# Min and Max threads per worker
#threads 1, 6
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
# Default to production
rails_env = "dev"
environment rails_env
# Set up socket location
bind "unix://#{shared_dir}/tmp/sockets/puma_xxx.sock"
# Set master PID and state locations
pidfile "#{shared_dir}/tmp/pids/puma.pid"
state_path "#{shared_dir}/tmp/pids/puma.state"
stdout_redirect '/var/www/xxx/current/log/puma.access.log', '/var/www/xxx/current/log/puma.error.log', true
activate_control_app
on_worker_boot do
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end
после внесения изменений в puma.rb
файл puma get запустился, но когда я нажимаю на браузер с доменным именем, появляется пустая страница. Я проверяю nginx журнал ошибок. Я обнаружил, что есть проблема с тайм-аутом.
Error stacktrace
2020/08/05 12:49:10 [error] 20295#0: *9802 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xxxxxxxx, server: xxxx, request: "GET /s3.xxxx.org/image001.png HTTP/1.1", upstream: "http://unix:///var/www/xxxx/shared/tmp/sockets/puma_xxxx.sock/s3.xxxx.org/image001.png", host: "xxxx", referrer: "https://xxxx/"
Команда, которую я использовал для запуска puma serve bundle exec puma -C /var/www/xxx/shared/puma.rb
Требуется дополнительная информация, дайте мне знать, я обновлю свой вопрос соответствующим образом. Любая помощь будет оценена по достоинству. Заранее спасибо.