#amazon-web-services #amazon-ec2 #amazon-rds #amazon-ecs #ruby-on-rails-6
Вопрос:
Я пытаюсь выполнить команду rails db:migrate на своих экземплярах ec2. Связь между экземпляром ec2 и MYSQL RDS работает нормально. Но когда я запускаю миграцию
bundle exec rails db:migrate RAILS_ENV='staging'
это дает мне такие ошибки, как
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
/usr/local/rvm/gems/ruby-2.7.1/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect'
/usr/local/rvm/gems/ruby-2.7.1/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/usr/local/rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connectio
Я использую докер
FROM phusion/passenger-ruby27:1.0.11
ENV RAILS_ENV staging
CMD ["/sbin/my_init"]
# Using Nginx and Passenger
RUN rm -f /etc/service/nginx/down
RUN rm /etc/nginx/sites-enabled/default
ADD docker/stg/nginx/nginx.conf /etc/nginx/sites-enabled/webapp.conf
RUN bash -lc 'rvm --default use ruby-2.7.1'
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -yqq amp;amp; apt-get install -yqq nodejs
build-essential yarn locales locales-all
mysql-client libmysqlclient-dev
amp;amp; apt-get clean openssh-server
amp;amp; rm -rf /var/lib/apt/lists/*
RUN apt-get update amp;amp; apt-get install -y
tzdata
ENV TZ=Asia/Tokyo
## shared mime info for mimemagic
RUN curl -sL -o shared-mime-info_1.9-2_amd64.deb http://mirrors.kernel.org/ubuntu/pool/main/s/shared-mime-info/shared-mime-info_1.9-2_amd64.deb
# RUN dpkg -P --force-all shared-mime-info
RUN dpkg --install shared-mime-info_1.9-2_amd64.deb
RUN gem install bundler -v 2.1.4
WORKDIR /wishealth-stg
RUN chmod u x /wishealth-stg
COPY Gemfile Gemfile.lock ./
RUN bundle config build.nokogiri --use-system-libraries
RUN gem install bundler
ENV BUNDLE_PATH /gems
RUN bundle install
COPY package.json yarn.lock ./
RUN yarn install --check-files
COPY . ./
#RUN bundle exec rails db:migrate RAILS_ENV=staging
RUN RAILS_ENV=staging bundle exec rake assets:precompile
RUN RAILS_ENV=staging bundle exec rake assets:clean
# Docker is handle Log and send it to cloudwatch - START
ENV RAILS_LOG_TO_STDOUT enabled
ENV RAILS_SERVE_STATIC_FILES enabled
# Docker is handle Log and send it to cloudwatch - END
RUN chmod -R go w ./tmp
# Clean up APT when done.
RUN apt-get clean amp;amp; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
EXPOSE 80
И моя база данных.yml будет
default: amp;default
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: "root"
password: ""
host: localhost
#socket: '/tmp/mysql.sock
development:
<<: *default
database: app_development
staging:
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
host: {RDS_HOST}
database: {RDS_DATABASE_NAME}
username: {RDS_USER_NAME}
password: {RDS_PASSWORD}
test:
<<: *default
database: app_test
production:
<<: *default
database: <%= ENV.fetch('DB_DATABASE', '') %>
username: <%= ENV.fetch("DB_USER", "root") %>
password: <%= ENV.fetch("DB_PASSWORD", "") %>
host: <%= ENV.fetch('DB_HOSTNAME', '') %>
port: <%= ENV.fetch('DB_PORT', 3306) %>