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