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,