Rất dễ dàng để chạy các tác vụ DB trong quy trình làm việc Handler
bình thường, vì chức năng runDB
có thể được sử dụng để chuyển đổi các hành động SqlPersistM
thành Handler
.Làm cách nào để chạy các hành động DB của Yesod trong REPL?
Nhưng không có cách nào để chuyển đổi SqlPersistM
trực tiếp thành IO
bằng cài đặt ứng dụng mặc định. Nhìn vào Foundation.hs
như nó quy định tại đoạn đầu đài ứng dụng, có các trường hợp sau đây
instance YesodPersist App where
type YesodPersistBackend App = SqlBackend
runDB action = do
master <- getYesod
runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
getDBRunner = defaultGetDBRunner appConnPool
mà về cơ bản sử dụng runSqlPool
với cấu hình của ứng dụng, nhưng tôi không thấy một cách dễ dàng như thế nào để tận dụng này để truy cập vào cấu hình trong REPL.
TL; DR: Những gì tôi đang tìm kiếm chỉ đơn giản là việc có thể làm điều gì đó như runDB $ selectList [...] [...]
từ bên trong cabal repl trong ứng dụng Yesod tôi, mà không cần phải lặp lại trong các thiết lập mà Yesod giàn giáo không ra khỏi hộp.
Để làm rõ, bạn có đang sử dụng giàn giáo yesod không? Nếu có, bạn có thể sử dụng [các hàm này] (https://github.com/yesodweb/yesod-scaffold/blob/bb7897b67021f42aa38c7f2fedd03be81f8980c9/Application.hs#L161-L171) để chạy các thao tác xử lý và truy vấn DB. Sử dụng ví dụ: 'db $ selectList [UserName ==. "foo"] [] ' – MaxGabriel
@MaxGabriel Tôi khuyên bạn nên đưa ra nhận xét đó một câu trả lời, đó là một minh chứng tốt về cách đạt được mục tiêu của Jakub. –
Cuộc gọi tốt @MichaelSnoyman – MaxGabriel