Tôi đã thấy rất nhiều ví dụ về cách tạo vùng chứa Docker cho ứng dụng Rails. Thông thường họ chạy một máy chủ đường ray và có một CMD chạy di chuyển/thiết lập sau đó sẽ trả về máy chủ Rails.Chạy di chuyển với Rails trong vùng chứa Docker với nhiều phiên bản vùng chứa
Nếu tôi đang tạo ra 5 trong số các vùng chứa này cùng một lúc, thì Rails sẽ xử lý nhiều quy trình cố gắng bắt đầu di chuyển như thế nào? Tôi có thể thấy Rails kiểm tra phiên bản giản đồ hiện trong nhật ký truy vấn chung (đó là một cơ sở dữ liệu MySQL):
SELECT `schema_migrations`.`version` FROM `schema_migrations`
Nhưng tôi có thể nhìn thấy một tình trạng chủng tộc ở đây nếu điều này xảy ra cùng lúc on Rails trường hợp khác nhau.
Xem xét DDL không giao dịch trong MySQL và tôi không thấy bất kỳ khóa nào xảy ra trong nhật ký truy vấn chung trong khi chạy di chuyển (ngoại trừ giao dịch chuyển đổi), có vẻ như sẽ khởi động song song một ý tưởng tồi. Trong thực tế, nếu tôi khởi động ba lần cục bộ, tôi có thể thấy hai trường hợp đường ray bị lỗi khi cố gắng tạo bảng vì nó đã tồn tại trong khi trường hợp đường ray thứ ba hoàn thành việc di chuyển một cách vui vẻ. Nếu đây là một quá trình di chuyển đã chèn thứ gì đó vào cơ sở dữ liệu thì nó sẽ không an toàn. Có một ý tưởng tốt hơn để chạy một thùng chứa duy nhất chạy di chuyển/thiết lập sau đó sinh sản (ví dụ) một cá thể Unicorn mà đến lượt nó sinh ra nhiều công nhân đường ray không? Không.
Tôi có nên sinh ra các thùng chứa đường ray N và một 'vùng chứa di chuyển' chạy quá trình di chuyển rồi thoát không?
Có tùy chọn nào tốt hơn không?
Điều này có vẻ có liên quan http://blog.carbonfive.com/2015/03/17/docker-rails-docker-compose-together-in-your-development-workflow/ –
@MaxWilliams từ giao diện Dockerfile của mình là một ví dụ tốt về cách vô tình gây ra vấn đề, nhưng không chứa giải pháp. Ví dụ của ông hoạt động tốt để thử nghiệm (nhưng có thể từ từ). Tôi không thể tin rằng tất cả mọi người đang chạy một máy chủ đường ray duy nhất trong sản xuất! –
Hmm yeah bạn nói đúng, xin lỗi:/Chắc chắn không phải là trường hợp mọi người đang chạy một máy chủ rails duy nhất trong sản xuất! Ví dụ, chúng tôi có ba hộp, mỗi một amazon aws dụ, với một số thư mục được chia sẻ và mỗi chạy 12 mongrels, chúng tôi thực sự có 36 máy chủ đường ray trên 3 hộp. Chúng tôi không sử dụng docker tho :) –