We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
LocalResult doesn't work with different drive (Windows 10)
## Description
Just getting started with Prefect... looks very promising, thanks! I ran into this issue though:

On MS Windows 10, LocalResult seems to only work with a `dir` pointing to the C: drive. It doesn't work for the E: drive. See reproduction example.

This is a major issue on my PCs - they have a very small C: drive, and much larger SSDs on other drives.

## Expected Behavior
LocalResult instantiate without problem and saves results in E: path.

## Reproduction
The following works:
```
from prefect.engine.results.local_result import LocalResult
result = LocalResult(dir="c:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect")
```
If I change the path to use the E: drive instead (`c:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect`), I get this error:
```
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-26b211f5d685> in <module>
----> 1 result = LocalResult(dir="e:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect")

d:\Users\chris\Anaconda3\envs\miniopt\lib\site-packages\prefect\engine\results\local_result.py in __init__(self, dir, validate_dir, **kwargs)
     33         if (
     34             dir is None
---> 35             or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])
     36             == full_prefect_path
     37         ):

d:\Users\chris\Anaconda3\envs\miniopt\lib\ntpath.py in commonpath(paths)
    619         # caught.
    620         if len(set(d for d, p in drivesplits)) != 1:
--> 621             raise ValueError("Paths don't have the same drive")
    622 
    623         drive, path = splitdrive(paths[0].replace(altsep, sep))

ValueError: Paths don't have the same drive
```

## Environment
Prefect 0.11.1 installed via pip
pwd was in E: drive

`prefect diagnostics`:
{
  "config_overrides": {},
  "env_vars": [],
  "system_information": {
    "platform": "Windows-10-10.0.18362-SP0",
    "prefect_version": "0.11.1",
    "python_version": "3.7.7"
  }
}

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/prefect/engine/results/local_result.py`
Content:
```
1 import os
2 from slugify import slugify
3 from typing import Any
4 
5 import cloudpickle
6 import pendulum
7 
8 from prefect import config
9 from prefect.engine.result import Result
10 
11 
12 class LocalResult(Result):
13     """
14     Result that is written to and retrieved from the local file system.
15 
16     **Note**: If this result raises a `PermissionError` that could mean it is attempting
17     to write results to a directory that it is not permissioned for. In that case it may be
18     helpful to specify a specific `dir` for that result instance.
19 
20     Args:
21         - dir (str, optional): the _absolute_ path to a directory for storing
22             all results; defaults to `${prefect.config.home_dir}/results`
23         - validate_dir (bool, optional): a boolean specifying whether to validate the
24             provided directory path; if `True`, the directory will be converted to an
25             absolute path and created.  Defaults to `True`
26         - **kwargs (Any, optional): any additional `Result` initialization options
27     """
28 
29     def __init__(
30         self, dir: str = None, validate_dir: bool = True, **kwargs: Any
31     ) -> None:
32         full_prefect_path = os.path.abspath(config.home_dir)
33         if (
34             dir is None
35             or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])
36             == full_prefect_path
37         ):
38             directory = os.path.join(config.home_dir, "results")
39         else:
40             directory = dir
41 
42         if validate_dir:
43             abs_directory = os.path.abspath(os.path.expanduser(directory))
44             if not os.path.exists(abs_directory):
45                 os.makedirs(abs_directory)
46         else:
47             abs_directory = directory
48         self.dir = abs_directory
49 
50         super().__init__(**kwargs)
51 
52     @property
53     def default_location(self) -> str:
54         fname = "prefect-result-" + slugify(pendulum.now("utc").isoformat())
55         location = os.path.join(self.dir, fname)
56         return location
57 
58     def read(self, location: str) -> Result:
59         """
60         Reads a result from the local file system and returns the corresponding `Result` instance.
61 
62         Args:
63             - location (str): the location to read from
64 
65         Returns:
66             - Result: a new result instance with the data represented by the location
67         """
68         new = self.copy()
69         new.location = location
70 
71         self.logger.debug("Starting to read result from {}...".format(location))
72 
73         with open(os.path.join(self.dir, location), "rb") as f:
74             new.value = cloudpickle.loads(f.read())
75 
76         self.logger.debug("Finished reading result from {}...".format(location))
77 
78         return new
79 
80     def write(self, value: Any, **kwargs: Any) -> Result:
81         """
82         Writes the result to a location in the local file system and returns a new `Result`
83         object with the result's location.
84 
85         Args:
86             - value (Any): the value to write; will then be stored as the `value` attribute
87                 of the returned `Result` instance
88             - **kwargs (optional): if provided, will be used to format the location template
89                 to determine the location to write to
90 
91         Returns:
92             - Result: returns a new `Result` with both `value` and `location` attributes
93         """
94         new = self.format(**kwargs)
95         new.value = value
96         assert new.location is not None
97 
98         self.logger.debug("Starting to upload result to {}...".format(new.location))
99 
100         full_path = os.path.join(self.dir, new.location)
101         os.makedirs(os.path.dirname(full_path), exist_ok=True)
102         with open(full_path, "wb") as f:
103             f.write(cloudpickle.dumps(new.value))
104 
105         self.logger.debug("Finished uploading result to {}...".format(new.location))
106 
107         return new
108 
109     def exists(self, location: str, **kwargs: Any) -> bool:
110         """
111         Checks whether the target result exists in the file system.
112 
113         Does not validate whether the result is `valid`, only that it is present.
114 
115         Args:
116             - location (str): Location of the result in the specific result target.
117                 Will check whether the provided location exists
118             - **kwargs (Any): string format arguments for `location`
119 
120         Returns:
121             - bool: whether or not the target result exists
122         """
123         return os.path.exists(os.path.join(self.dir, location.format(**kwargs)))
124
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/prefect/engine/results/local_result.py b/src/prefect/engine/results/local_result.py
--- a/src/prefect/engine/results/local_result.py
+++ b/src/prefect/engine/results/local_result.py
@@ -30,11 +30,16 @@
         self, dir: str = None, validate_dir: bool = True, **kwargs: Any
     ) -> None:
         full_prefect_path = os.path.abspath(config.home_dir)
-        if (
-            dir is None
-            or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])
-            == full_prefect_path
-        ):
+        common_path = ""
+        try:
+            if dir is not None:
+                common_path = os.path.commonpath(
+                    [full_prefect_path, os.path.abspath(dir)]
+                )
+        except ValueError:
+            # ValueError is raised if comparing two paths in Windows from different drives, e.g., E:/ and C:/
+            pass
+        if dir is None or common_path == full_prefect_path:
             directory = os.path.join(config.home_dir, "results")
         else:
             directory = dir

{"golden_diff": "diff --git a/src/prefect/engine/results/local_result.py b/src/prefect/engine/results/local_result.py\n--- a/src/prefect/engine/results/local_result.py\n+++ b/src/prefect/engine/results/local_result.py\n@@ -30,11 +30,16 @@\n         self, dir: str = None, validate_dir: bool = True, **kwargs: Any\n     ) -> None:\n         full_prefect_path = os.path.abspath(config.home_dir)\n-        if (\n-            dir is None\n-            or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])\n-            == full_prefect_path\n-        ):\n+        common_path = \"\"\n+        try:\n+            if dir is not None:\n+                common_path = os.path.commonpath(\n+                    [full_prefect_path, os.path.abspath(dir)]\n+                )\n+        except ValueError:\n+            # ValueError is raised if comparing two paths in Windows from different drives, e.g., E:/ and C:/\n+            pass\n+        if dir is None or common_path == full_prefect_path:\n             directory = os.path.join(config.home_dir, \"results\")\n         else:\n             directory = dir\n", "issue": "LocalResult doesn't work with different drive (Windows 10)\n## Description\r\nJust getting started with Prefect... looks very promising, thanks! I ran into this issue though:\r\n\r\nOn MS Windows 10, LocalResult seems to only work with a `dir` pointing to the C: drive. It doesn't work for the E: drive. See reproduction example.\r\n\r\nThis is a major issue on my PCs - they have a very small C: drive, and much larger SSDs on other drives.\r\n\r\n## Expected Behavior\r\nLocalResult instantiate without problem and saves results in E: path.\r\n\r\n## Reproduction\r\nThe following works:\r\n```\r\nfrom prefect.engine.results.local_result import LocalResult\r\nresult = LocalResult(dir=\"c:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect\")\r\n```\r\nIf I change the path to use the E: drive instead (`c:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect`), I get this error:\r\n```\r\n---------------------------------------------------------------------------\r\nValueError                                Traceback (most recent call last)\r\n<ipython-input-29-26b211f5d685> in <module>\r\n----> 1 result = LocalResult(dir=\"e:/cl/amd/code/dl/mopt/tests/data/result/playground_prefect\")\r\n\r\nd:\\Users\\chris\\Anaconda3\\envs\\miniopt\\lib\\site-packages\\prefect\\engine\\results\\local_result.py in __init__(self, dir, validate_dir, **kwargs)\r\n     33         if (\r\n     34             dir is None\r\n---> 35             or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])\r\n     36             == full_prefect_path\r\n     37         ):\r\n\r\nd:\\Users\\chris\\Anaconda3\\envs\\miniopt\\lib\\ntpath.py in commonpath(paths)\r\n    619         # caught.\r\n    620         if len(set(d for d, p in drivesplits)) != 1:\r\n--> 621             raise ValueError(\"Paths don't have the same drive\")\r\n    622 \r\n    623         drive, path = splitdrive(paths[0].replace(altsep, sep))\r\n\r\nValueError: Paths don't have the same drive\r\n```\r\n\r\n## Environment\r\nPrefect 0.11.1 installed via pip\r\npwd was in E: drive\r\n\r\n`prefect diagnostics`:\r\n{\r\n  \"config_overrides\": {},\r\n  \"env_vars\": [],\r\n  \"system_information\": {\r\n    \"platform\": \"Windows-10-10.0.18362-SP0\",\r\n    \"prefect_version\": \"0.11.1\",\r\n    \"python_version\": \"3.7.7\"\r\n  }\r\n}\n", "before_files": [{"content": "import os\nfrom slugify import slugify\nfrom typing import Any\n\nimport cloudpickle\nimport pendulum\n\nfrom prefect import config\nfrom prefect.engine.result import Result\n\n\nclass LocalResult(Result):\n    \"\"\"\n    Result that is written to and retrieved from the local file system.\n\n    **Note**: If this result raises a `PermissionError` that could mean it is attempting\n    to write results to a directory that it is not permissioned for. In that case it may be\n    helpful to specify a specific `dir` for that result instance.\n\n    Args:\n        - dir (str, optional): the _absolute_ path to a directory for storing\n            all results; defaults to `${prefect.config.home_dir}/results`\n        - validate_dir (bool, optional): a boolean specifying whether to validate the\n            provided directory path; if `True`, the directory will be converted to an\n            absolute path and created.  Defaults to `True`\n        - **kwargs (Any, optional): any additional `Result` initialization options\n    \"\"\"\n\n    def __init__(\n        self, dir: str = None, validate_dir: bool = True, **kwargs: Any\n    ) -> None:\n        full_prefect_path = os.path.abspath(config.home_dir)\n        if (\n            dir is None\n            or os.path.commonpath([full_prefect_path, os.path.abspath(dir)])\n            == full_prefect_path\n        ):\n            directory = os.path.join(config.home_dir, \"results\")\n        else:\n            directory = dir\n\n        if validate_dir:\n            abs_directory = os.path.abspath(os.path.expanduser(directory))\n            if not os.path.exists(abs_directory):\n                os.makedirs(abs_directory)\n        else:\n            abs_directory = directory\n        self.dir = abs_directory\n\n        super().__init__(**kwargs)\n\n    @property\n    def default_location(self) -> str:\n        fname = \"prefect-result-\" + slugify(pendulum.now(\"utc\").isoformat())\n        location = os.path.join(self.dir, fname)\n        return location\n\n    def read(self, location: str) -> Result:\n        \"\"\"\n        Reads a result from the local file system and returns the corresponding `Result` instance.\n\n        Args:\n            - location (str): the location to read from\n\n        Returns:\n            - Result: a new result instance with the data represented by the location\n        \"\"\"\n        new = self.copy()\n        new.location = location\n\n        self.logger.debug(\"Starting to read result from {}...\".format(location))\n\n        with open(os.path.join(self.dir, location), \"rb\") as f:\n            new.value = cloudpickle.loads(f.read())\n\n        self.logger.debug(\"Finished reading result from {}...\".format(location))\n\n        return new\n\n    def write(self, value: Any, **kwargs: Any) -> Result:\n        \"\"\"\n        Writes the result to a location in the local file system and returns a new `Result`\n        object with the result's location.\n\n        Args:\n            - value (Any): the value to write; will then be stored as the `value` attribute\n                of the returned `Result` instance\n            - **kwargs (optional): if provided, will be used to format the location template\n                to determine the location to write to\n\n        Returns:\n            - Result: returns a new `Result` with both `value` and `location` attributes\n        \"\"\"\n        new = self.format(**kwargs)\n        new.value = value\n        assert new.location is not None\n\n        self.logger.debug(\"Starting to upload result to {}...\".format(new.location))\n\n        full_path = os.path.join(self.dir, new.location)\n        os.makedirs(os.path.dirname(full_path), exist_ok=True)\n        with open(full_path, \"wb\") as f:\n            f.write(cloudpickle.dumps(new.value))\n\n        self.logger.debug(\"Finished uploading result to {}...\".format(new.location))\n\n        return new\n\n    def exists(self, location: str, **kwargs: Any) -> bool:\n        \"\"\"\n        Checks whether the target result exists in the file system.\n\n        Does not validate whether the result is `valid`, only that it is present.\n\n        Args:\n            - location (str): Location of the result in the specific result target.\n                Will check whether the provided location exists\n            - **kwargs (Any): string format arguments for `location`\n\n        Returns:\n            - bool: whether or not the target result exists\n        \"\"\"\n        return os.path.exists(os.path.join(self.dir, location.format(**kwargs)))\n", "path": "src/prefect/engine/results/local_result.py"}], "after_files": [{"content": "import os\nfrom slugify import slugify\nfrom typing import Any\n\nimport cloudpickle\nimport pendulum\n\nfrom prefect import config\nfrom prefect.engine.result import Result\n\n\nclass LocalResult(Result):\n    \"\"\"\n    Result that is written to and retrieved from the local file system.\n\n    **Note**: If this result raises a `PermissionError` that could mean it is attempting\n    to write results to a directory that it is not permissioned for. In that case it may be\n    helpful to specify a specific `dir` for that result instance.\n\n    Args:\n        - dir (str, optional): the _absolute_ path to a directory for storing\n            all results; defaults to `${prefect.config.home_dir}/results`\n        - validate_dir (bool, optional): a boolean specifying whether to validate the\n            provided directory path; if `True`, the directory will be converted to an\n            absolute path and created.  Defaults to `True`\n        - **kwargs (Any, optional): any additional `Result` initialization options\n    \"\"\"\n\n    def __init__(\n        self, dir: str = None, validate_dir: bool = True, **kwargs: Any\n    ) -> None:\n        full_prefect_path = os.path.abspath(config.home_dir)\n        common_path = \"\"\n        try:\n            if dir is not None:\n                common_path = os.path.commonpath(\n                    [full_prefect_path, os.path.abspath(dir)]\n                )\n        except ValueError:\n            # ValueError is raised if comparing two paths in Windows from different drives, e.g., E:/ and C:/\n            pass\n        if dir is None or common_path == full_prefect_path:\n            directory = os.path.join(config.home_dir, \"results\")\n        else:\n            directory = dir\n\n        if validate_dir:\n            abs_directory = os.path.abspath(os.path.expanduser(directory))\n            if not os.path.exists(abs_directory):\n                os.makedirs(abs_directory)\n        else:\n            abs_directory = directory\n        self.dir = abs_directory\n\n        super().__init__(**kwargs)\n\n    @property\n    def default_location(self) -> str:\n        fname = \"prefect-result-\" + slugify(pendulum.now(\"utc\").isoformat())\n        location = os.path.join(self.dir, fname)\n        return location\n\n    def read(self, location: str) -> Result:\n        \"\"\"\n        Reads a result from the local file system and returns the corresponding `Result` instance.\n\n        Args:\n            - location (str): the location to read from\n\n        Returns:\n            - Result: a new result instance with the data represented by the location\n        \"\"\"\n        new = self.copy()\n        new.location = location\n\n        self.logger.debug(\"Starting to read result from {}...\".format(location))\n\n        with open(os.path.join(self.dir, location), \"rb\") as f:\n            new.value = cloudpickle.loads(f.read())\n\n        self.logger.debug(\"Finished reading result from {}...\".format(location))\n\n        return new\n\n    def write(self, value: Any, **kwargs: Any) -> Result:\n        \"\"\"\n        Writes the result to a location in the local file system and returns a new `Result`\n        object with the result's location.\n\n        Args:\n            - value (Any): the value to write; will then be stored as the `value` attribute\n                of the returned `Result` instance\n            - **kwargs (optional): if provided, will be used to format the location template\n                to determine the location to write to\n\n        Returns:\n            - Result: returns a new `Result` with both `value` and `location` attributes\n        \"\"\"\n        new = self.format(**kwargs)\n        new.value = value\n        assert new.location is not None\n\n        self.logger.debug(\"Starting to upload result to {}...\".format(new.location))\n\n        full_path = os.path.join(self.dir, new.location)\n        os.makedirs(os.path.dirname(full_path), exist_ok=True)\n        with open(full_path, \"wb\") as f:\n            f.write(cloudpickle.dumps(new.value))\n\n        self.logger.debug(\"Finished uploading result to {}...\".format(new.location))\n\n        return new\n\n    def exists(self, location: str, **kwargs: Any) -> bool:\n        \"\"\"\n        Checks whether the target result exists in the file system.\n\n        Does not validate whether the result is `valid`, only that it is present.\n\n        Args:\n            - location (str): Location of the result in the specific result target.\n                Will check whether the provided location exists\n            - **kwargs (Any): string format arguments for `location`\n\n        Returns:\n            - bool: whether or not the target result exists\n        \"\"\"\n        return os.path.exists(os.path.join(self.dir, location.format(**kwargs)))\n", "path": "src/prefect/engine/results/local_result.py"}]}