2012-11-21 12 views
16

Konfiguruję nową aplikację za pomocą programu laravel (Laravel 4) i mam problemy z konfigurowaniem bazy danych za pomocą migracji.Jak uruchomić migracje dla określonego środowiska w sieci?

Zrobiłem plik migracji z:

artisan migrate:make --table="jobs" --create jobs 

który stworzył plik w bazie/migracji zgodnie z oczekiwaniami, zrobiłem kilka modów do tego i poszedł go odpalić za pomocą

artisan migrate --env=local 

Ale dostaję odpowiedź "Nothing to migrate"

Jeśli próbuję uruchomić bez --env=local, używa bazy danych.php w folderze config (nie w lokalnej/postoju/folder produkcji), z których nie chcemy korzystać, ponieważ nie będzie to zależne od środowiska.

Moja pierwsza myśl była w porządku, może potrzebuję umieścić flagę env na wywołaniu migrate:make, więc próbowałem tego, ale dostałem komunikat, że nie można utworzyć pliku migracji. Wtedy pomyślałem, że i tak nie ma sensu robić migracji opartych na env ... powinny być tworzone generycznie i po prostu działać na zasadzie env, więc ostatecznie wszystkie środowiska używają tych samych skryptów migracji.

Więc jestem trochę zatrzymany teraz, gdzie się udać, aby stąd

Odpowiedz

21

musisz określić środowisko przed poleceniem migrować.

artisan --env=local migrate 

Uruchamianie artisan help pokazuje format, w którym mają następować polecenia.

artisan help 

Usage: 
    [options] command [arguments] 
+0

niestety, to nie miał wpłynąć ... wciąż coraz 'Nic zmigrować' wiadomość – duellsy

+0

Cóż, zgodnie z pomocą, w jaki sposób określasz opcje. Rzuć okiem na "pomoc rzemieślnika", a zobaczysz, że jest w formacie polecenia [opcje] [argumenty] '. Moja rada polega teraz na upewnieniu się, że wszystkie środowiska są prawidłowo skonfigurowane. Właśnie sprawdziłem i to działa dobrze dla mnie. Więc brakuje ci czegoś innego. –

+0

To nie działa. – gandra404

1

Po zmodyfikowaniu migracji po jej uruchomieniu należy najpierw wycofać migrację.

php artisan migrate:rollback 

Kontynuuj działanie, dopóki migracja, którą zmieniliście, nie zostanie wycofana. Alternatywnie, można zresetować cały schemat z

php artisan migrate:reset 

Ale będziesz musiał zadzwonić do migracji jak normalne przynieść je na bieżąco.

php artisan migrate 

Wreszcie można zresetować, a następnie migrują poprzez wywołanie

php artisan rebuild 

Należy również pamiętać, że jest ogólnie złe praktyki zmodyfikować migracje po zostały one wykonane, chyba że dosłownie udało. Po wdrożeniu nie należy go modyfikować, a zamiast tego należy utworzyć nowy plik migracji.

Mam nadzieję, że to pomoże.

Edytuj: W jakiś sposób opuściłem wskaźnik Laravel 4. Większość tych poleceń nadal działa, ale sądzę, że trzeba je dostosować.

+0

Przepraszam, kiedy powiedziałem "wykonałem kilka modów", miałem na myśli tylko, że otworzyłem właśnie wygenerowany plik migracyjny i dodałem go w moim kodzie migracji. Nie edytowałem już uruchomionej migracji. Jest to pierwsza w historii migracja do tego projektu. – duellsy

+0

Możliwe jest również zburzenie i ponowne utworzenie migracji w jednym komendzie za pomocą php rzemieślnik migracja: odświeżenie – Atheist

3

Rozwiązano.

Rozwiązaniem było po prostu edycja lokalnego/database.php (lub produkcji/bazy danych.php itp), upewniając się, że zmienna migracje ścieżka jest skierowany do lokalizacji migrate:make jest tworzenie plików migracji, wystarczy zmienić

'application' => __DIR__.'/../database/migrations', 

do

'application' => DIR.'/../../database/migrations', 
0

zorientowali się rozwiązanie, aby uruchomić migrate dla różne bazy danych. Zasadniczo polecenie artisan migrate --env=local nie działa. Ale możemy zdefiniować nowy ciąg połączenia w config\database.php. Na przykład:

<?php 
    'mysql_testing' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_TESTING_HOST'), 
     'database' => env('DB_TESTING_DATABASE'), 
     'username' => env('DB_TESTING_USERNAME'), 
     'password' => env('DB_TESTING_PASSWORD'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => 'prefix_', 
    ], 

i określ --database kiedy prowadzimy artisan migrate takiego:

php artisan migrate --database=mysql_testing 

Hope this helps :)

Powiązane problemy