J'ai un environnement standard Rails3, RVM 1.2.9, Rails 3.0.5, Ruby 1.9.2p180, MySQL2 Gem 0.2.7, mysql-5.5.10-osx10.6-x86_64.
L'erreur que je rencontre lors de l'exécution de rake db:migrate
pour créer une base de données est la suivante:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
config/database.yml a
development:
adapter: mysql2
Host: localhost
username: root
password: xxxx
database: xxxx
bien sûr, il me manque quelque chose de simple.
Tout d’abord, pour trouver votre fichier de socket:
mysqladmin variables | grep socket
Pour moi, cela donne:
| socket | /tmp/mysql.sock |
Ensuite, ajoutez une ligne à votre config/database.yml
:
development:
adapter: mysql2
Host: localhost
username: root
password: xxxx
database: xxxx
socket: /tmp/mysql.sock
Je l'ai trouvé!
Remplacez Host: localhost
dans config/database.yml par Host: 127.0.0.1
pour que Rails se connecte via TCP/IP au lieu du socket local.
development:
adapter: mysql2
Host: 127.0.0.1
username: root
password: xxxx
database: xxxx
Votre serveur mysql n'est peut-être pas en cours d'exécution. Vous trouverez ci-dessous comment démarrer le serveur. Ceci est un extrait du fichier README fourni avec le téléchargement de mysql.
Après l’installation, vous pouvez démarrer MySQL en lançant les commandes Suivantes dans une fenêtre de terminal. Vous devez disposer de privilèges d'administrateurpour effectuer cette tâche.
Si vous avez installé l'élément de démarrage, utilisez cette commande:
Shell> Sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
(ENTER YOUR PASSWORD, IF NECESSARY)
(PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE Shell)
Si vous n'utilisez pas l'élément de démarrage, entrez la séquence de commande suivante:
Shell> cd /usr/local/mysql
Shell> Sudo ./bin/mysqld_safe
(ENTER YOUR PASSWORD, IF NECESSARY)
(PRESS CONTROL-Z)
Shell> bg
(PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE Shell)
"/tmp/mysql.sock" sera créé automatiquement lorsque vous démarrez le serveur MySQL. Pensez donc à le faire avant de démarrer le serveur Rails.
Si vous êtes sur Mac OSX,
L'emplacement par défaut du socket MySQL Unix est différent sous Mac OS X et Mac OS X Server en fonction du type d'installation choisi.
Emplacement des sockets MySQL Unix sur Mac OS X par type d'installation
Il suffit donc de changer votre database.yml dans socket: /tmp/mysql.sock
pour qu'il pointe au bon endroit, en fonction du système d'exploitation et du type d'installation que vous utilisez.
Avec mon installation de MAMP sur OSX, le socket MySQL est situé à /Applications/MAMP/tmp/mysql/mysql.sock
. J'ai utilisé locate mysql.sock
pour trouver l'emplacement de ma prise MySQL.
Donc, mon config/database.yml
ressemble à:
development:
adapter: mysql2
Host: localhost
username: root
password: xxxx
database: xxxx
socket: /Applications/MAMP/tmp/mysql/mysql.sock
Ce sont des options pour résoudre ce problème:
Option 1: changez votre hôte en 127.0.0.1
staging:
adapter: mysql2
Host: 127.0.0.1
username: root
password: xxxx
database: xxxx
socket: your-location-socket
Option 2: Il semble que vous ayez 2 connexions à votre serveur MySql . Pour trouver l'emplacement de votre fichier de socket, procédez comme suit:
mysqladmin variables | grep socket
pour moi donne:
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' exists!
ou
mysql --help
Je reçois cette erreur parce que j'ai installé XAMPP dans mon application OS X version 10.9.5 pour PHP. Choisissez l'un des emplacements de socket par défaut ici.
J'ai choisi les applications Rails par défaut:
socket: /tmp/mysql.sock
Pour mes applications PHP, j'installe XAMPP, je configure donc mon socket ici:
socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Autres emplacements de sockets sous OS X
Pour MAMPP:
socket: /Applications/MAMP/tmp/mysql/mysql.sock
Pour l'installateur de paquet de MySQL:
socket: /tmp/mysql.sock
Pour MySQL fourni avec Mac OS X Server:
socket: /var/mysql/mysql.sock
Pour Ubuntu:
socket: /var/run/mysqld/mysql.sock
Option 3: Si tous ces paramètres ne fonctionnent pas, vous pouvez supprimer l'emplacement de votre socket:
staging:
# socket: /var/run/mysqld/mysql.sock
J'espère que cela vous aidera.
L'emplacement par défaut du socket MySQL sous Mac OS X est /var/mysql/mysql.sock
.
J'ai eu le même problème, mais aucune des réponses ne donnait pas à pas ce que je devais faire. Cette erreur se produit parce que votre fichier de socket n'a pas encore été créé. Tout ce que tu dois faire est:
/tem/mysql.sock
soit créé. Pour cela, vous exécutez: mysql.server start
config/database.yml
et ajoutez le socket: /tmp/mysql.sock
rake:dbmigrate
une fois de plus et tout devrait fonctionner correctementJ'ai trouvé que le problème est que je n'ai qu'un environnement de production. Je n'ai pas d'environnement de développement ou de test.
En ajoutant 'Rails_ENV = production' pour donner la commande
bundle exec rake redmine:plugins:migrate Rails_ENV=production
ça a marché
Vous avez un problème avec ceci: Impossible de se connecter au serveur MySQL local via socket '/var/run/mysqld/mysqld.sock'
Ans: $ Sudo service mysql start
Si vous utilisez MYSQL via XAMPP:
Ouvrez le fichier de configuration mysql de XAMPP (sous OSX):
/Applications/XAMPP/etc/my.cnf
Copiez le chemin du socket:
socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Fichier de configuration de la base de données du projet Open Rails: Myproject/config/database.yml
Ajoutez la configuration du socket à la configuration de la base de développement:
->
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: difiuri_falcioni
pool: 5
username: root
password:
Host: localhost
socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Prendre plaisir :)
Sur ma machine, le service mysqld s'est arrêté, c'est pourquoi il me posait le même problème.
1: - Allez au terminal et tapez
Sudo service mysqld restart
Cela redémarrera le service mysqld et créera un nouveau fichier sock à l’emplacement requis.