2015-03-27 23 views
6

Tôi đã phát triển ứng dụng của mình ban đầu trong Laravel 4.2 nhưng đã quyết định chuyển sang phiên bản 5.0 để nó bao gồm nhiều thay đổi và điểm mạnh hơn 5.0 có trên 4.2.PHP Artisan Migrate với MAMP và Unix Socket

Tôi cố gắng để chạy migratiosn của tôi tuy nhiên tôi nhận được lỗi:

[PDOException] 
    SQLSTATE[HY000] [2002] No such file or directory 

Tôi nhìn vào này và nhận thấy như thế nào đó là vì tôi đang chạy MAMP cho máy chủ của tôi thay vì lang thang và nhà cửa vườn tược. Tôi không gõ vào việc sử dụng hai cái đó nhưng tôi vào thời điểm này cảm thấy thoải mái hơn với MAMP cho đến khi nó thất bại. Lý do tôi biết MAMP của nó là do cần khai báo giá trị socket unix được sử dụng.

Bây giờ trên phiên bản 4.2 của tôi về ứng dụng của tôi, tôi có như sau:

'mysql' => array(
    'driver' => 'mysql', 
    'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 
    'host'  => getenv('DB_HOST'), 
    ... 
), 

Với Laravel 5.0 phiên bản của tôi, tôi đang làm cho việc sử dụng tập tin .env cho các biến môi trường của tôi và không chắc chắn làm thế nào tôi cần phải làm gì điều này để nó biết sử dụng giá trị socket unix.

Bạn có thể cho tôi biết cách tôi nên áp dụng điều này vào phiên bản mới hay cách tốt hơn để thêm nó vào cài đặt để tôi không phải làm vậy?

+0

và bạn có chắc chắn rằng ổ cắm unix ở vị trí này không? bạn đã cài đặt MAMP ở một vị trí không mặc định? –

+0

Có và tôi biết điều đó là chính xác. – user3732216

+0

có để làm gì? Tôi dám nói rằng không có tập tin có tên 'mysql.sock' trên máy tính của bạn tại địa điểm được chỉ định. Máy tính không phạm sai lầm về điều đó. Nếu nó nói không có tập tin ở đó, đó là bởi vì không có tập tin ở đó.Nếu bạn đã cài đặt MAMP của mình ở một vị trí không mặc định, bạn có thể giải quyết vấn đề bằng cách cập nhật cấu hình của bạn với đường dẫn tốt đến tệp 'mysql.sock', nhưng bản thân MAMP không khuyên bạn cài đặt phần mềm của họ ở một nơi khác, bởi vì nhiều vấn đề như vậy như thế này sẽ phát sinh. –

Trả lời

19

Hãy thử điều này:

'mysql' => array(
'driver' => 'mysql', 
'unix_socket' => getenv('UNIX_SOCKET'), 
'host'  => getenv('DB_HOST'), 
... 
), 

Trong .env thêm

UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 
+0

Chỉ cần thử nghiệm điều này. Làm việc như người ở! – Troy

+0

Cần lưu ý rằng một số cài đặt của Laravel 5 không đi kèm với tệp config/database.php theo mặc định. Tôi không biết tại sao, nhưng tôi phải tạo ra một cái và nó không thực sự được đề cập trong tài liệu Laravel 5 (mà tôi có thể tìm thấy.) – russellmania

+0

Cảm ơn bạn đã chia sẻ các giải pháp. Tôi đang sử dụng Laravel 5.3.x –

3

mặc dù câu hỏi khá cũ, nhưng vẫn có thể giúp đỡ người khác. để thêm câu trả lời.

thậm chí còn có giải pháp đơn giản. thêm video này vào ur .env tập tin

DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock 
0

Cảm ơn, giúp đỡ khắc phục vấn đề di cư đối với tôi sử dụng:

MAMP PRO 4.2 
Laravel 5.5 

bên .env file:

DB_CONNECTION=mysql 
DB_HOST=localhost 
DB_PORT=3306 
DB_DATABASE=<database name> 
DB_USERNAME=<username - default root> 
DB_PASSWORD=<password - default root> 
UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 

bên config/database.php:

'connections' => [ 

    'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', '<database name>'), 
     'username' => env('DB_USERNAME', '<username - default root>'), 
     'password' => env('DB_PASSWORD', '<password - default root>'), 
     'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 
], 

Cũng đừng quên thêm vào pp/nhà cung cấp/AppServiceProviders.php:

use Illuminate\Support\Facades\Schema; 
public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 
0

Trong laravel 5,5 thay đổi unix_socket để DB_SOCKET

bên .env file:

DB_USERNAME=root 
DB_PASSWORD=root 
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 

bên config/database.php:

'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', '127.0.0.1'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'unix_socket' => env('DB_SOCKET', ''), 
Các vấn đề liên quan