Когда я пытаюсь развернуть свое приложение RoR через среду AWS Elastic Beanstalk Environment, на консоли появляется следующая ошибка:
ERROR: [Instance: i-0c1d25d2a182d8424] Command failed on instance. Return code: 1 Output: (TRUNCATED)...ly and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/opt/rubies/ruby-2.5.0/bin/bundle:23:in `load'
/opt/rubies/ruby-2.5.0/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace).
Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/12_db_migration.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
ERROR: Unsuccessful command execution on instance id(s) 'i-0c1d25d2a182d8424'. Aborting the operation.
ERROR: Failed to deploy application.
Ниже представлена моя конфигурация в database.yml.
production:
<<: *default
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
port: <%= ENV['RDS_PORT'] %>
И следующая ошибка, записанная в журнале:
++ export RUBY_ROOT=/opt/rubies/ruby-2.5.0
++ RUBY_ROOT=/opt/rubies/ruby-2.5.0
++ export RUBYOPT=
++ RUBYOPT=
++ export PATH=/opt/rubies/ruby-2.5.0/bin:/opt/elasticbeanstalk/lib/ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
++ PATH=/opt/rubies/ruby-2.5.0/bin:/opt/elasticbeanstalk/lib/ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
+++ /opt/rubies/ruby-2.5.0/bin/ruby -
++ eval 'export RUBY_ENGINE=ruby;
export RUBY_VERSION=2.5.0;
export GEM_ROOT = "/opt/rubies/ruby-2.5.0/lib/ruby/gems/2.5.0";'
+++ export RUBY_ENGINE=ruby
+++ RUBY_ENGINE=ruby
+++ export RUBY_VERSION=2.5.0
+++ RUBY_VERSION=2.5.0
+++ export GEM_ROOT=/opt/rubies/ruby-2.5.0/lib/ruby/gems/2.5.0
+++ GEM_ROOT=/opt/rubies/ruby-2.5.0/lib/ruby/gems/2.5.0
++ (( 0 != 0 ))
+ cd /var/app/ondeck
+ su -s /bin/bash -c 'bundle exec /opt/elasticbeanstalk/support/scripts/check-for-rake-task.rb db:migrate' webapp
`/home/webapp` is not a directory.
Bundler will use `/tmp/bundler/home/webapp' as your home directory temporarily.
+ '[' false = true ']'
+ su -s /bin/bash -c 'leader_only bundle exec rake db:migrate' webapp
`/home/webapp` is not a directory.
Bundler will use `/tmp/bundler/home/webapp' as your home directory temporarily.
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/opt/rubies/ruby-2.5.0/bin/bundle:23:in `load'
/opt/rubies/ruby-2.5.0/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace) (Executor::NonZeroExitStatus)
Кроме того, rake db: migrate отлично работает локально. Я понятия не имею, что здесь может происходить, для базы данных я пытался импортировать моментальный снимок экземпляра базы данных, которая у меня уже была на AWS RDS, но я также пытался создать новую базу данных.
Если вы думаете, имеете ли вы какое-либо представление о том, что здесь может происходить, я был бы очень признателен, если бы вы могли сообщить мне.
Заранее спасибо.
Вы установили правильные значения для RDS_HOSTNAME, RDS_PORT? Можете ли вы подключить базу данных к своему экземпляру EC2?
@Tai где мне установить такие значения? Я думал, что они были автоматически переданы Elastic Beans.





В качестве вашего комментария я считаю, что вы пропустили настройку RDS_ * в Elastic Beanstalk. Чтобы исправить это:
Спасибо. Я попытался добавить параметры, но все равно получаю те же ошибки. Есть ли другие идеи о том, что может быть причиной этого?
Пожалуйста, опубликуйте /var/log/eb-activity.log
Это тот же самый, что я писал в вопросе @tai
Если вы укажете правильные переменные, eb-activity.log будет содержать ваши переменные, например: +++ export RDS_DB_NAME=application +++ RDS_DB_NAME=application
установка ваших переменных в пользовательском интерфейсе не всегда работает, установка их через CLI обычно делает @Tai
Возможно, Постгрес умер на инстансе Beanstalk EC2. Например, в ответе это пользователь пытается вручную запустить
postgres. Можете ли вы попробовать добавить к нему конфигурацию.ebextensionс команда, "postgres -Dwhich postgres", в основном, чтобы убедиться, чтоpostgresработает до запуска вашего приложения?