RAILS 5.2 + Ruby 2.6.3 + Capistrano + Puma + Nginx (ActiveRecord :: AdapterNotSpecified: в конфигурации базы данных не указан адаптер) - PullRequest
1 голос
/ 05 августа 2020

У меня есть приложение 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

Требуется дополнительная информация, дайте мне знать, я обновлю свой вопрос соответствующим образом. Любая помощь будет оценена по достоинству. Заранее спасибо.

...