]> git.openstreetmap.org Git - nominatim.git/commitdiff
replace make serve with nominatim serve command
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 3 Feb 2021 15:17:46 +0000 (16:17 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 3 Feb 2021 15:34:31 +0000 (16:34 +0100)
With the website directory now tied to the project directory instead
of the build directory, it is no longer possible to use make for
running the web server.

CMakeLists.txt
docs/admin/Import.md
nominatim/cli.py
nominatim/tools/exec_utils.py
test/python/test_cli.py

index f5820c7fdf9ea06c4eb2b4427681be6f9d872193..f7d396d0ebc6be503d653085268e3e152cd2d08f 100644 (file)
@@ -117,22 +117,6 @@ if (BUILD_IMPORTER)
                   ${PROJECT_BINARY_DIR}/nominatim)
 endif()
 
-#-----------------------------------------------------------------------------
-# Targets for running a development webserver from the build directory.
-#-----------------------------------------------------------------------------
-
-if (BUILD_API)
-   add_custom_target(serve
-           php -S 127.0.0.1:8088
-           WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/website
-   )
-
-   add_custom_target(serve-global
-           php -S 0.0.0.0:8088
-           WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/website
-   )
-endif()
-
 #-----------------------------------------------------------------------------
 # Tests
 #-----------------------------------------------------------------------------
index 21cae89a3a2cda636a2301d4c5365ee944ef7177..280231b670dfaab8a948bbb4c14874022b46ecdd 100644 (file)
@@ -236,7 +236,8 @@ MB. Make sure you leave enough RAM for PostgreSQL and osm2pgsql as mentioned
 above. If the system starts swapping or you are getting out-of-memory errors,
 reduce the cache size or even consider using a flatnode file.
 
-### Verify the import
+
+### Testing the installation
 
 Run this script to verify all required tables and indices got created successfully.
 
@@ -244,12 +245,10 @@ Run this script to verify all required tables and indices got created successful
 nominatim check-database
 ```
 
-### Testing the installation
-
 Now you can try out your installation by running:
 
 ```sh
-make serve
+nominatim serve
 ```
 
 This runs a small test server normally used for development. You can use it
index 60701bbf06056899ce2e365434fc6d4e18ec5c89..722022b500c13a514c12448c6520a221ed22f317 100644 (file)
@@ -11,7 +11,7 @@ import logging
 from pathlib import Path
 
 from .config import Configuration
-from .tools.exec_utils import run_legacy_script, run_api_script
+from .tools.exec_utils import run_legacy_script, run_api_script, run_php_server
 from .db.connection import connect
 from .db import status
 from .errors import UsageError
@@ -633,6 +633,28 @@ class QueryExport:
 
         return run_legacy_script(*params, nominatim_env=args)
 
+
+class AdminServe:
+    """\
+    Start a simple web server for serving the API.
+
+    This command starts the built-in PHP webserver to serve the website
+    from the current project directory. This webserver is only suitable
+    for testing and develop. Do not use it in production setups!
+
+    By the default, the webserver can be accessed at: http://127.0.0.1:8088
+    """
+
+    @staticmethod
+    def add_args(parser):
+        group = parser.add_argument_group('Server arguments')
+        group.add_argument('--server', default='127.0.0.1:8088',
+                           help='The address the server will listen to.')
+
+    @staticmethod
+    def run(args):
+        run_php_server(args.server, args.project_dir / 'website')
+
 STRUCTURED_QUERY = (
     ('street', 'housenumber and street'),
     ('city', 'city, town or village'),
@@ -895,6 +917,7 @@ def nominatim(**kwargs):
     parser.add_subcommand('refresh', UpdateRefresh)
 
     parser.add_subcommand('export', QueryExport)
+    parser.add_subcommand('serve', AdminServe)
 
     if kwargs.get('phpcgi_path'):
         parser.add_subcommand('search', APISearch)
index e0d048a217a7f632f27fccc14710dbde3d51ee86..45853163a795e662757cdcdad791c29be1d21c48 100644 (file)
@@ -89,6 +89,13 @@ def run_api_script(endpoint, project_dir, extra_env=None, phpcgi_bin=None,
     return 0
 
 
+def run_php_server(server_address, base_dir):
+    """ Run the built-in server from the given directory.
+    """
+    subprocess.run(['/usr/bin/env', 'php', '-S', server_address],
+                   cwd=str(base_dir), check=True)
+
+
 def run_osm2pgsql(options):
     """ Run osm2pgsql with the given options.
     """
index cde84759b0f6fa89d322222c50355732cbcf40a5..702a4b742b0f8db81e96ed4b4880a2e1ff450c94 100644 (file)
@@ -215,6 +215,14 @@ def test_replication_update_continuous_no_change(monkeypatch, temp_db_conn, stat
     assert sleep_mock.last_args[0] == 60
 
 
+def test_serve_command(monkeypatch):
+    func = MockParamCapture()
+    monkeypatch.setattr(nominatim.cli, 'run_php_server', func)
+
+    call_nominatim('serve')
+
+    assert func.called == 1
+
 @pytest.mark.parametrize("params", [
                          ('search', '--query', 'new'),
                          ('reverse', '--lat', '0', '--lon', '0'),