Назад | Перейти на главную страницу

Ошибка mysql.sock при развертывании с AWS Ubuntu и RDS

 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
 Rails.root: /opt/deployment.myproject/releases/20140805050704

Я потратил почти 3 дня, пытаясь найти ответ на этот вопрос. Также пытаюсь понять, что происходит за кулисами, но теперь я думаю, что сейчас хорошее время просто попросить мир о помощи!

Я развертываю приложение Ruby on Rails с AWS на Ubuntu AMI, EC2 и RDS. Я решил использовать базу данных MSQL, потому что это то, с чем я построил свое приложение, в котором я использую RDS.

Поскольку я использую RDS и мне нужно указать конечную точку, имя пользователя и пароль, я думаю, что, возможно, подсказка "local" в ошибке говорит мне, что база данных считается локальной. Я считаю, что это не так, поскольку он находится в другом экземпляре, чем мой EC2, и связан с ним. (Амирит?)

Я пытался найти файл mysql.sock с множеством различных типов команд «find» и «grep». Те, которые действительно получают поиск, возвращают огромный список каталогов, отображающих что-то вроде «нет разрешения».

Я также искал его по пути, который отображает ошибка, но в каталоге выполнения нет каталога mysql.

Несколько вопросов, которые, я думаю, помогут ответить на этот вопрос ..

Когда именно создается этот файл? Когда создается база данных? Разве этот файл не должен быть в экземпляре RDS? Или он создается, когда я запускаю cap deploy: setup или cap deploy?

Поскольку там написано «Rails.root», я думаю, что он ищет файл, начиная с корня приложения, в частности. Так что что-то вроде app / var / run ... и т. Д. Вместо фактического корня.

Да, и кстати. Когда я использую FTP в экземпляр EC2, я тоже получаю это сообщение.

Could not change directory to “var/run/mysqld/mysqld.sock' (2)  
Rails.root:/opt/deployment.myproject/releases/20140803230821”.

Также: Мне удалось подключиться к RDS через Sequel Pro, и мои миграции отлично прошли через Capistrano, потому что все мои таблицы там!

Думаю, я сказал достаточно. Вот несколько файлов, которые могут иметь отношение к делу:

my.cnf сокращен для краткости

    [client]
    port        = 3306
    socket      = /var/run/mysqld/mysqld.sock

    # Here is entries for some specific programs
    # The following values assume you have at least 32M ram

    # This was formally known as [safe_mysqld]. Both versions are currently parsed.
    [mysqld_safe]
    socket      = /var/run/mysqld/mysqld.sock
    nice        = 0

    [mysqld]
    #
    # * Basic Settings
    #
    user        = mysql
    pid-file    = /var/run/mysqld/mysqld.pid
    socket      = /var/run/mysqld/mysqld.sock
    port        = 3306
    basedir     = /usr
    datadir     = /var/lib/mysql
    tmpdir      = /tmp
    lc-messages-dir = /usr/share/mysql

database.yml

    production:
      adapter: mysql2
      database: <censored db name> 
      host: <censored endpoint>
      username: <censored username>
      password: <censored password>
      port: 3306
      pool: 5
      timeout: 5000

deploy.rb

    role :web, '<censored db name>'
    role :app, '<censored db name>'
    role :db,  '<censored db name>', primary: true

    set :rails_env,    'production'
    set :webroot,      '/opt/myproject'        # specify directory symlink
    set :deploy_to,    '/opt/deployment.myproject'
    set :user,         'ubuntu'
    set :use_sudo,     false
    set :bundle_flags, '--deployment --quiet' # some bundler options

    after 'deploy:update_code', 'deploy:symlink_shared'
    after 'deploy:update_code', 'deploy:migrate'

    load 'deploy/assets' # results in 'rake assets:precompile' during deploy

Capistrano настроен на использование производственной среды, но любая команда / сценарий / и т.д., которые вы используете для фактического запуска приложения Rails на коробке, скорее всего, находится в режиме разработки.

export RAILS_ENV=production
bin/rails s