2

Я действительно близок к тому, чтобы в Amazon Opsworks было развернуто простое приложение Rails - с использованием экземпляра EC2 под управлением Phusion Passenger и экземпляра RDS для сервера базы данных (на нем работает mySQL). Код приложения взят из моего Git Repo.

Вот проблема.

Экземпляр EC2 будет обслуживать мою статическую домашнюю страницу ROR - файл public/index.html, поэтому я знаю, что приложение там и обслуживается.

Проблема возникает, когда я пытаюсь выполнить HTTP GET для извлечения представлений ресурсов из базы данных.

Вот точный код ошибки:

«Не удается подключиться к локальному серверу MySQL через сокет '/var/lib/mysql/mysql.sock' (2) (Mysql2::Error)»

Я предполагаю, что он пытается подключиться к локальному серверу MySQL на моем ноутбуке через сокет, вместо того, чтобы пытаться подключиться к экземпляру Amazon RDS (серверу базы данных MySQL), который я указал в файле database.yml.

Вот мой database.yml:

development:
adapter: mysql2
encoding: utf8
database: *********_development
pool: 5
username: ****
password: ****
socket: /tmp/mysql.sock
host: localhost


test:
 adapter: mysql2
 encoding: utf8
 database: ********_test
 pool: 5
 username: ********
 password: ****
 socket: /tmp/mysql.sock
 host: localhost


production:
 adapter: mysql2 
 encoding: utf8
 database: *****
 username: ******
 password: *****
 host: ***dbinstance.*********.us-west-2.rds.amazonaws.com
 port: 3306 

Как я могу заставить приложение rails использовать производственную базу данных, указанную в database.yml, вместо того, чтобы всегда пытаться подключиться к локальной базе данных?

1 ответ1

0

Opsworks не использует файл database.yml, который вы используете в своем приложении. Чтобы это работало, вам нужно предоставить сценарии Opsworks правильные учетные данные. Вы можете добавить пользовательский JSON в свой стек. Пожалуйста, посмотрите здесь, чтобы понять, как это работает:

https://forums.aws.amazon.com/thread.jspa?threadID=119823

Я добавил пользовательский JSON в мои настройки стека следующим образом:

{
  "deploy": {
    "yourappname": {
      "database": {
        "adapter": "mysql2",
        "encoding": "unicode",
        "host": "yourdbonrds.rds.amazonaws.com",
        "port": "3306",
        "database": "yourdb",
        "pool": "5",
        "username": "yourusername",
        "password": "yourpassword"
      }
    }
  }
}

Все "ваши" -поля должны быть изменены через ваши пользовательские значения.

Еще один совет. В консоли RDS необходимо добавить группу безопасности с сервера Opswork Rails в ваш экземпляр RDS, чтобы экземпляру было разрешено подключаться к RDS. Пожалуйста, посмотрите здесь, как это сделать:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithSecurityGroups.AuthorizingEC2.html

Вы можете попробовать, если вы можете подключиться к экземпляру RDS из экземпляра Opsworks, например, через ssh к экземпляру, а затем подключиться к telnet к вашему экземпляру RDS, например, telnet Your-RDS-Instance 3306

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .