Đã kiểm tra ActiveRecord, DataMapper, Sequel: một số globals sử dụng (biến tĩnh) một số yêu cầu kết nối db mở trước khi tải tệp nguồn với mô hình. ORM nào tốt hơn để sử dụng trong ứng dụng Sinatra sử dụng các cơ sở dữ liệu khác nhau.ORM nào để sử dụng trong một quá trình nhiều kết nối db ứng dụng sinatra?
Trả lời
DataMapper được thiết kế để sử dụng nhiều cơ sở dữ liệu.
Bạn có thể thiết lập nhiều vị trí lưu trữ chỉ bằng cách nói điều gì đó như DataMapper.setup(:repository_one, "mysql://localhost/my_db_name")
.
DataMapper sau đó theo dõi tất cả các kho đã được thiết lập trong một băm mà bạn có thể tham khảo và sử dụng cho Phạm vi:
DataMapper.repository(:repository_one){ MyModel.all }
(Phạm vi mặc định chỉ là DataMapper.repository, mà bạn có thể thiết lập bằng cách nói DataMapper.setup(:default, "postgres://localhost/my_primary_db")
hoặc tương tự)
Cá nhân tôi thích phần tiếp theo cho tất cả các truy cập cơ sở dữ liệu ORM và cơ bản của tôi và là những gì tôi sử dụng với Sinatra/Padrino và bất kỳ lúc nào tôi cần truy cập cơ sở dữ liệu ngoài Rails.
Tôi đã sử dụng DataMapper nhưng cảm thấy phần tiếp theo dễ dàng hơn và linh hoạt hơn, nhưng có lẽ đó chỉ là cách tâm trí của tôi hoạt động. ActiveRecord là OK, nhưng tôi nghĩ nó hoạt động tốt nhất khi kết hợp với Rails.
Điều gì là "tốt hơn"? Tôi nghĩ rằng đó là chủ quan và chủ yếu là gắn liền với cách bộ não của bạn hoạt động.
Dường như có thể sử dụng các cơ sở dữ liệu khác nhau trong hầu hết các ORM. Đối với DataMapper, hãy xem câu trả lời bí mật. Đối với phần tiếp theo, bạn có thể chuyển bộ xử lý cơ sở dữ liệu cho mô hình:
class Tag < Sequel::Model(db)
end
nơi db được mở cơ sở dữ liệu. Đối với ActiveRecord, bạn có thể sử dụng phương thức establish_connection.
Tài liệu chính thức có thể được tìm thấy tại http://datamapper.org/docs/misc.html. Nếu bạn không chỉ định ngữ cảnh/kho lưu trữ, nó sẽ lấy ': default'. Bạn nên ít nhất có một bối cảnh như vậy. –