Corrige ejecución de las migraciones en módulos
This commit is contained in:
parent
2167ab9417
commit
58afd1f258
9 changed files with 35 additions and 38 deletions
|
|
@ -1,12 +1 @@
|
||||||
use crate::db::migration::*;
|
|
||||||
|
|
||||||
pub mod m20220312_000001_create_table_user;
|
pub mod m20220312_000001_create_table_user;
|
||||||
|
|
||||||
pub struct Migrator;
|
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
|
||||||
impl MigratorTrait for Migrator {
|
|
||||||
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
|
||||||
vec![Box::new(m20220312_000001_create_table_user::Migration)]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
localize!("en-US", "src/base/module/user/locales");
|
localize!("src/base/module/user/locales");
|
||||||
|
|
||||||
mod entity;
|
mod entity;
|
||||||
mod migration;
|
mod migration;
|
||||||
|
|
@ -24,8 +24,10 @@ impl ModuleTrait for UserModule {
|
||||||
cfg.route("/user/login", server::web::get().to(login));
|
cfg.route("/user/login", server::web::get().to(login));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn migrations(&self, dbconn: &db::DbConn) -> Result<(), db::DbErr> {
|
fn migrations(&self) -> Vec<Box<dyn db::migration::MigrationTrait>> {
|
||||||
db_migrations!(dbconn)
|
vec![
|
||||||
|
boxed_migration!(m20220312_000001_create_table_user)
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,15 +45,15 @@ pub static CONFIG: Lazy<Config> = Lazy::new(|| {
|
||||||
/// seguros. Produce un *panic!* en caso de asignaciones no válidas.
|
/// seguros. Produce un *panic!* en caso de asignaciones no válidas.
|
||||||
macro_rules! config_map {
|
macro_rules! config_map {
|
||||||
(
|
(
|
||||||
$COMM:expr,
|
$doc:expr,
|
||||||
$CONF:ident,
|
$SETTINGS:ident,
|
||||||
$TYPE:tt
|
$Type:tt
|
||||||
$(, $key:expr => $value:expr)*
|
$(, $key:expr => $value:expr)*
|
||||||
) => {
|
) => {
|
||||||
$crate::doc_comment! {
|
$crate::doc_comment! {
|
||||||
concat!($COMM),
|
concat!($doc),
|
||||||
|
|
||||||
pub static $CONF: $crate::Lazy<$TYPE> = $crate::Lazy::new(|| {
|
pub static $SETTINGS: $crate::Lazy<$Type> = $crate::Lazy::new(|| {
|
||||||
let mut settings = $crate::config::CONFIG.clone();
|
let mut settings = $crate::config::CONFIG.clone();
|
||||||
$(
|
$(
|
||||||
settings.set_default($key, $value).unwrap();
|
settings.set_default($key, $value).unwrap();
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::{Lazy, trace};
|
use crate::{Lazy, run_now};
|
||||||
|
use crate::db::migration::*;
|
||||||
use crate::core::theme::ThemeTrait;
|
use crate::core::theme::ThemeTrait;
|
||||||
use crate::core::module::ModuleTrait;
|
use crate::core::module::ModuleTrait;
|
||||||
use crate::core::server;
|
use crate::core::server;
|
||||||
|
|
@ -41,9 +42,18 @@ pub fn modules(cfg: &mut server::web::ServiceConfig) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
||||||
pub fn migrations() {
|
pub fn run_migrations() {
|
||||||
trace::info!("Checking migrations");
|
run_now({
|
||||||
|
struct Migrator;
|
||||||
|
impl MigratorTrait for Migrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
let mut migrations = vec![];
|
||||||
for m in MODULES.read().unwrap().iter() {
|
for m in MODULES.read().unwrap().iter() {
|
||||||
m.migrations(&*server::db::DBCONN).expect("Failed to run migrations");
|
migrations.append(&mut m.migrations());
|
||||||
}
|
}
|
||||||
|
migrations
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Migrator::up(&server::db::DBCONN, None)
|
||||||
|
}).unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ pub trait ModuleTrait: Send + Sync {
|
||||||
|
|
||||||
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn migrations(&self, dbconn: &db::DbConn) -> Result<(), db::DbErr> {
|
fn migrations(&self) -> Vec<Box<dyn db::migration::MigrationTrait>> {
|
||||||
Ok(())
|
vec![]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ impl Application {
|
||||||
|
|
||||||
// Comprueba actualizaciones pendientes de la base de datos (opcional).
|
// Comprueba actualizaciones pendientes de la base de datos (opcional).
|
||||||
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
||||||
all::migrations();
|
all::run_migrations();
|
||||||
|
|
||||||
// Prepara el servidor web.
|
// Prepara el servidor web.
|
||||||
let server = server::HttpServer::new(move || {
|
let server = server::HttpServer::new(move || {
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,8 @@ pub mod migration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! db_migrations {
|
macro_rules! boxed_migration {
|
||||||
( $DBCONN:ident ) => {{
|
( $migration_module:ident ) => {{
|
||||||
$crate::run_now({
|
Box::new(migration::$migration_module::Migration)
|
||||||
use $crate::db::migration::MigratorTrait;
|
|
||||||
|
|
||||||
migration::Migrator::up($DBCONN, None)
|
|
||||||
})
|
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ pub use crate::trace;
|
||||||
pub use crate::localize;
|
pub use crate::localize;
|
||||||
|
|
||||||
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
||||||
pub use crate::{db, db_migrations};
|
pub use crate::{db, boxed_migration};
|
||||||
|
|
||||||
pub use crate::core::html::*;
|
pub use crate::core::html::*;
|
||||||
pub use crate::core::theme::*;
|
pub use crate::core::theme::*;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@
|
||||||
/// ];
|
/// ];
|
||||||
/// ```
|
/// ```
|
||||||
macro_rules! args {
|
macro_rules! args {
|
||||||
( $($KEY:expr => $VALUE:expr),* ) => {{
|
( $($key:expr => $value:expr),* ) => {{
|
||||||
let mut a = std::collections::HashMap::new();
|
let mut a = std::collections::HashMap::new();
|
||||||
$(
|
$(
|
||||||
a.insert(String::from($KEY), $VALUE.into());
|
a.insert(String::from($key), $value.into());
|
||||||
)*
|
)*
|
||||||
a
|
a
|
||||||
}};
|
}};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue