html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app https://github.com/simonw/datasette/issues/717#issuecomment-609111516,https://api.github.com/repos/simonw/datasette/issues/717,609111516,MDEyOklzc3VlQ29tbWVudDYwOTExMTUxNg==,9599,2020-04-05T00:57:29Z,2020-04-05T00:57:29Z,OWNER,"If I can get this working I think I'll release it as a plugin, similar to [datasette-publish-fly](https://github.com/simonw/datasette-publish-fly).","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609306846,https://api.github.com/repos/simonw/datasette/issues/717,609306846,MDEyOklzc3VlQ29tbWVudDYwOTMwNjg0Ng==,9599,2020-04-05T04:18:48Z,2020-04-05T04:18:48Z,OWNER,"I need to route all paths to the same function. This should help: https://twitter.com/aboodman/status/1246605658067066882 ![image](https://user-images.githubusercontent.com/9599/78466750-d4d55700-76b9-11ea-8fac-cfa674b9785b.png) ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609883545,https://api.github.com/repos/simonw/datasette/issues/717,609883545,MDEyOklzc3VlQ29tbWVudDYwOTg4MzU0NQ==,9599,2020-04-06T16:00:41Z,2020-04-06T16:03:21Z,OWNER,"https://now-2-datasette-e4l4whc9f.now.sh/ - first proof of concept! It's just four files right now, all in the same directory and deployed by running `now`. `now.json` ```json { ""version"": 2, ""builds"": [ { ""src"": ""index.py"", ""use"": ""@now/python"" } ], ""routes"": [ { ""src"": ""(.*)"", ""dest"": ""index.py"" } ] } ``` `requirements.txt`: ``` datasette datasette-debug-asgi ``` `index.py`: ```python from datasette.app import Datasette app = Datasette([""fixtures.db""]).app() ``` Plus a copy of the standard `fixtures.db` file. It almost entirely works! Just one bug so far: https://now-2-datasette-e4l4whc9f.now.sh/fixtures/table%2Fwith%2Fslashes.csv returns a 404 https://latest.datasette.io/fixtures/table%2Fwith%2Fslashes.csv does not. Plugins work too - here's the output from `datasette-debug-asgi`: https://now-2-datasette-e4l4whc9f.now.sh/-/asgi-scope","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609887635,https://api.github.com/repos/simonw/datasette/issues/717,609887635,MDEyOklzc3VlQ29tbWVudDYwOTg4NzYzNQ==,9599,2020-04-06T16:07:51Z,2020-04-06T16:08:47Z,OWNER,"Built myself a quick ASGI scope debugging tool: https://now-2-asgi-scope.now.sh/ Same `now.json` as above, but `index.py` is this: ```python from pprint import pformat async def app(scope, receive, send): await send({ 'type': 'http.response.start', 'status': 200, 'headers': [ [b'content-type', b'text/plain'], ], }) await send({ 'type': 'http.response.body', 'body': pformat(scope).encode('utf8'), }) ``` https://now-2-asgi-scope.now.sh/fixtures/table%2Fwith%2Fslashes.csv shows what's going on - those `%2F` have been decoded to `/` before they get to the ASGI app - probably by the Now routing layer: ``` ... 'http_version': '1.1', 'method': 'GET', 'path': '/fixtures/table/with/slashes.csv', 'query_string': b'', 'raw_path': b'/fixtures/table/with/slashes.csv', ... ``` That `raw_path` there needs to be `b'/fixtures/table%2Fwith%2Fslashes.csv'` in order for Datasette to fully work here.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609889528,https://api.github.com/repos/simonw/datasette/issues/717,609889528,MDEyOklzc3VlQ29tbWVudDYwOTg4OTUyOA==,9599,2020-04-06T16:11:07Z,2020-04-06T16:11:07Z,OWNER,"https://now-2-datasette-e4l4whc9f.now.sh/-/versions ```json { ""python"": { ""version"": ""3.6.10"", ""full"": ""3.6.10 (default, Mar 10 2020, 22:54:43) \n[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)]"" }, ""datasette"": { ""version"": ""0.39"" }, ""asgi"": ""3.0"", ""uvicorn"": ""0.11.3"", ""sqlite"": { ""version"": ""3.7.17"", ""fts_versions"": [ ""FTS4"", ""FTS3"" ], ""extensions"": {}, ""compile_options"": [ ""DISABLE_DIRSYNC"", ""ENABLE_COLUMN_METADATA"", ""ENABLE_FTS3"", ""ENABLE_RTREE"", ""ENABLE_UNLOCK_NOTIFY"", ""SECURE_DELETE"", ""TEMP_STORE=1"", ""THREADSAFE=1"" ] } } ``` SQLite 3.7.17 is from May 2013: http://www.sqlite.org/releaselog/3_7_17.html - and there's no FTS5 (but we do get FTS4). So the Now v2 version will be a bit limited (no support for table names containing `/` and an ancient SQLite version without FTS5) - but it's definitely enough for a `datasette-publish-now` plugin.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609905147,https://api.github.com/repos/simonw/datasette/issues/717,609905147,MDEyOklzc3VlQ29tbWVudDYwOTkwNTE0Nw==,9599,2020-04-06T16:39:50Z,2020-04-06T16:39:50Z,OWNER,"I tried deploying the whole of www.niche-museums.com with mixed results. https://datasette-jm25oxd7s.now.sh/browse/museums works https://datasette-jm25oxd7s.now.sh/ shows ""disk I/O error""","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-609905777,https://api.github.com/repos/simonw/datasette/issues/717,609905777,MDEyOklzc3VlQ29tbWVudDYwOTkwNTc3Nw==,9599,2020-04-06T16:41:04Z,2020-04-06T16:43:05Z,OWNER,"Full traceback from Zeit Now logs: ``` ERROR: conn=, sql = ""select name from sqlite_master where type='table'"", params = None: disk I/O error Traceback (most recent call last): File ""/var/task/datasette/utils/asgi.py"", line 121, in route_path return await view(new_scope, receive, send) File ""/var/task/datasette/utils/asgi.py"", line 193, in view request, **scope[""url_route""][""kwargs""] File ""/var/task/datasette/views/base.py"", line 61, in head response = await self.get(*args, **kwargs) File ""/var/task/datasette/views/index.py"", line 27, in get table_names = await db.table_names() File ""/var/task/datasette/database.py"", line 221, in table_names ""select name from sqlite_master where type='table'"" File ""/var/task/datasette/database.py"", line 167, in execute sql_operation_in_thread File ""/var/task/datasette/database.py"", line 114, in execute_against_connection_in_thread self.ds.executor, in_thread File ""/var/lang/lib/python3.6/concurrent/futures/thread.py"", line 56, in run result = self.fn(*self.args, **self.kwargs) File ""/var/task/datasette/database.py"", line 111, in in_thread return fn(conn) File ""/var/task/datasette/database.py"", line 137, in sql_operation_in_thread cursor.execute(sql, params or {})sqlite3.OperationalError: disk I/O error ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-610066089,https://api.github.com/repos/simonw/datasette/issues/717,610066089,MDEyOklzc3VlQ29tbWVudDYxMDA2NjA4OQ==,9599,2020-04-06T22:17:32Z,2020-04-06T22:17:53Z,OWNER,I think that error might be because Niche Museums uses two database files that are 0 bytes (about.db and map.db) - I just tried purely publishing the empty about.db file and got the same error: https://datasette-ks55wp251.now.sh/ - https://datasette-ks55wp251.now.sh/-/databases,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-610067097,https://api.github.com/repos/simonw/datasette/issues/717,610067097,MDEyOklzc3VlQ29tbWVudDYxMDA2NzA5Nw==,9599,2020-04-06T22:20:11Z,2020-04-06T22:20:11Z,OWNER,"Yes I think that's it - I created a table in `about.db`, then dropped that table and ran `vacuum` and the result was an empty database file that wasn't zero bytes. I deployed it and it worked: https://datasette-koo7abu7j.now.sh/ ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527, https://github.com/simonw/datasette/issues/717#issuecomment-610076073,https://api.github.com/repos/simonw/datasette/issues/717,610076073,MDEyOklzc3VlQ29tbWVudDYxMDA3NjA3Mw==,9599,2020-04-06T22:47:21Z,2020-04-06T22:47:21Z,OWNER,I'm confident it's possible to create a plugin that deploys to Now v2 now. I'll do the rest of the work in a separate repo: https://github.com/simonw/datasette-publish-now,"{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",594189527,