2012-11-21 34 views
16

Tôi đang thiết lập một ứng dụng mới với laravel (Laravel 4) và có một số vấn đề khi thiết lập cơ sở dữ liệu thông qua di chuyển.Làm cách nào để chạy di chuyển cho một môi trường cụ thể trong laravel

tôi đã thực hiện một tập tin di chuyển với:

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

nào tạo ra một tập tin trong cơ sở dữ liệu/di cư như mong đợi, tôi thực hiện một số mods này, và đi đến cháy nó lên bằng

artisan migrate --env=local 

Nhưng tôi nhận được trả lời của "Nothing to migrate"

Nếu tôi thử chạy mà không cần --env=local, nó sử dụng tệp database.php trong thư mục cấu hình (không phải trong địa phương/dàn dựng/thư mục sản xuất) mà chúng tôi không muốn sử dụng, vì nó sẽ không có môi trường cụ thể.

Suy nghĩ đầu tiên của tôi là OK, có thể tôi cần đặt cờ env vào cuộc gọi migrate:make, vì vậy tôi đã thử, nhưng có lỗi khi nói rằng nó không thể tạo tệp di chuyển. Sau đó, tôi nghĩ rằng nó không có ý nghĩa để làm cho env dựa di chuyển anyway ... họ nên được tạo chung chung, và chỉ cần chạy trên một cơ sở env mỗi, do đó, cuối cùng, tất cả các môi trường đang sử dụng cùng một kịch bản di chuyển.

Vì vậy, hiện tại tôi đang gặp khó khăn khi đi tới đây từ đây

Trả lời

21

Bạn cần chỉ định môi trường trước lệnh di chuyển.

artisan --env=local migrate 

Chạy artisan help cho bạn thấy định dạng, trong đó các lệnh là để làm theo.

artisan help 

Usage: 
    [options] command [arguments] 
+0

buồn bã, điều này đã không ảnh hưởng đến ... vẫn nhận được 'Không có gì để di chuyển' thư – duellsy

+0

Vâng, theo sự trợ giúp đó là cách bạn chỉ định các tùy chọn. Hãy xem 'trợ giúp artisan' và bạn sẽ thấy nó ở định dạng của '[options] command [arguments]'. Lời khuyên của tôi bây giờ là đảm bảo môi trường của bạn được thiết lập chính xác. Tôi chỉ kiểm tra, và nó hoạt động tốt cho tôi. Vì vậy, bạn đang thiếu cái gì khác. –

+0

Điều này không hoạt động. – gandra404

1

Nếu bạn sửa đổi di chuyển sau khi chạy, trước tiên bạn cần khôi phục quá trình di chuyển.

php artisan migrate:rollback 

Tiếp tục chạy cho đến khi di chuyển bạn đã thay đổi được khôi phục. Ngoài ra, bạn có thể đặt lại toàn bộ lược đồ của mình với

php artisan migrate:reset 

Nhưng sau đó bạn sẽ cần phải gọi di chuyển của mình như bình thường để cập nhật chúng.

php artisan migrate 

Cuối cùng, bạn có thể thiết lập lại và sau đó di chuyển bằng cách gọi

php artisan rebuild 

Cũng lưu ý rằng nó thường là xấu thực hành để sửa đổi sự di cư của bạn sau khi họ đã được thực hiện, trừ khi bạn có nghĩa là chỉ cần thực hiện nó. Khi nó được triển khai, bạn không nên sửa đổi nó, và thay vào đó tạo một tệp di chuyển mới.

Hy vọng điều này sẽ hữu ích.

Chỉnh sửa: Tôi bằng cách nào đó đã bỏ qua chỉ báo Laravel 4. Hầu hết các lệnh này vẫn hoạt động mà tôi tin, nhưng bạn có thể cần điều chỉnh.

+0

Xin lỗi, khi tôi nói "đã thực hiện một số sửa đổi", tôi chỉ muốn mở tệp di chuyển vừa được tạo và thêm vào mã di chuyển của tôi. Tôi không chỉnh sửa di chuyển đã chạy. Đây là lần đầu tiên di chuyển cho dự án này – duellsy

+0

nó cũng có thể phá bỏ và xây dựng lại di chuyển trong một commando bằng cách sử dụng di chuyển thủ công php: làm mới – Atheist

3

Đã giải quyết.

Giải pháp đơn giản là chỉnh sửa local/database.php (hoặc sản xuất/cơ sở dữ liệu.php vv), đảm bảo rằng các biến di cư con đường được trỏ đến vị trí mà migrate:make đang tạo ra các file chuyển, chỉ cần thay đổi

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

để

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

tôi đã tìm ra một giải pháp để chạy migrate cho cơ sở dữ liệu khác nhau. Về cơ bản, lệnh artisan migrate --env=local không hoạt động. Nhưng chúng ta có thể định nghĩa một chuỗi kết nối mới trong config\database.php. Ví dụ:

<?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_', 
    ], 

Và xác định --database khi chúng tôi chạy artisan migrate như thế này:

php artisan migrate --database=mysql_testing 

Hope this helps :)

Các vấn đề liên quan