Browse Source

Merge pull request #105 from Demonthos/hot-reloading-resilient

Log io errors instead of panicking for hot reloading
Jon Kelley 2 năm trước cách đây
mục cha
commit
6c2a51e453
1 tập tin đã thay đổi với 16 bổ sung11 xóa
  1. 16 11
      src/server/mod.rs

+ 16 - 11
src/server/mod.rs

@@ -136,9 +136,11 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig) -> R
 
     let dist_path = config.out_dir.clone();
     let (reload_tx, _) = broadcast::channel(100);
-    let file_map = Arc::new(Mutex::new(FileMap::<HtmlCtx>::new(
-        config.crate_dir.clone(),
-    )));
+    let FileMapBuildResult { map, errors } = FileMap::<HtmlCtx>::create(config.crate_dir.clone())?;
+    for err in errors {
+        log::error!("{}", err);
+    }
+    let file_map = Arc::new(Mutex::new(map));
     let build_manager = Arc::new(BuildManager {
         config: config.clone(),
         reload_tx: reload_tx.clone(),
@@ -185,10 +187,10 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig) -> R
                         let mut map = file_map.lock().unwrap();
 
                         match map.update_rsx(&path, &crate_dir) {
-                            UpdateResult::UpdatedRsx(msgs) => {
+                            Ok(UpdateResult::UpdatedRsx(msgs)) => {
                                 messages.extend(msgs);
                             }
-                            UpdateResult::NeedsRebuild => {
+                            Ok(UpdateResult::NeedsRebuild) => {
                                 match build_manager.rebuild() {
                                     Ok(res) => {
                                         print_console_info(
@@ -208,6 +210,9 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig) -> R
                                 }
                                 return;
                             }
+                            Err(err) => {
+                                log::error!("{}", err);
+                            }
                         }
                     }
                     for msg in messages {
@@ -222,12 +227,12 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig) -> R
     .unwrap();
 
     for sub_path in allow_watch_path {
-        watcher
-            .watch(
-                &config.crate_dir.join(sub_path),
-                notify::RecursiveMode::Recursive,
-            )
-            .unwrap();
+        if let Err(err) = watcher.watch(
+            &config.crate_dir.join(&sub_path),
+            notify::RecursiveMode::Recursive,
+        ) {
+            log::error!("error watching {sub_path:?}: \n{}", err);
+        }
     }
 
     // start serve dev-server at 0.0.0.0:8080