Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 从metatiles渲染/提取.png平铺:“0”;未能读取fd 4上的cmd“;(OSX)_Macos_Apache_Mapnik - Fatal编程技术网

Macos 从metatiles渲染/提取.png平铺:“0”;未能读取fd 4上的cmd“;(OSX)

Macos 从metatiles渲染/提取.png平铺:“0”;未能读取fd 4上的cmd“;(OSX),macos,apache,mapnik,Macos,Apache,Mapnik,我正在尝试使用mapnik和mod_tile运行一个tile服务器。现在,我能够从(缩放、x、y)请求生成MetaTile,但我不明白为什么Tile从来没有被实际提供过(作为png)。原因似乎是以下错误:无法读取FD 4上的cmd 我已经检查了metatiles是否符合我使用此工具所要求的内容,并且一切看起来都很好 以防万一,以下是关于调试/信息的内容: $ sudo -u postgres renderd -f -c /usr/local/etc/renderd.conf renderd[16

我正在尝试使用mapnik和mod_tile运行一个tile服务器。现在,我能够从(缩放、x、y)请求生成MetaTile,但我不明白为什么Tile从来没有被实际提供过(作为png)。原因似乎是以下错误:无法读取FD 4上的cmd

我已经检查了metatiles是否符合我使用此工具所要求的内容,并且一切看起来都很好

以防万一,以下是关于调试/信息的内容:

$ sudo -u postgres renderd -f -c /usr/local/etc/renderd.conf
renderd[16811] <Info>: config renderd: unix socketname=/var/run/renderd/renderd.sock
renderd[16811] <Info>: config renderd: num_threads=4
renderd[16811] <Info>: config renderd: num_slaves=0
renderd[16811] <Info>: config renderd: tile_dir=/var/lib/mod_tile
renderd[16811] <Info>: config renderd: stats_file=/var/run/renderd/renderd.stats
renderd[16811] <Info>: config mapnik:  plugins_dir=/usr/local/lib/mapnik/input
renderd[16811] <Info>: config mapnik:  font_dir=/usr/local/lib/mapnik/fonts
renderd[16811] <Info>: config mapnik:  font_dir_recurse=1
renderd[16811] <Info>: config renderd(0): Active
renderd[16811] <Info>: config renderd(0): unix socketname=/var/run/renderd/renderd.sock
renderd[16811] <Info>: config renderd(0): num_threads=4
renderd[16811] <Info>: config renderd(0): tile_dir=/var/lib/mod_tile
renderd[16811] <Info>: config renderd(0): stats_file=/var/run/renderd/renderd.stats
renderd[16811] <Info>: config map 0:   name(default) file(openstreetmap-carto/mapnik.xml) uri(/osm_tiles/) htcp() host(localhost)
renderd[16811] <Info>: Initialising unix server socket on /var/run/renderd/renderd.sock
renderd[16811] <Debug>: Created server socket 3
renderd[16811] <Info>: Renderd is using mapnik version 3.0.13  
...
...
Running in foreground mode...
renderd[16811] <Debug>: Starting stats thread
debug: init_storage_backend: initialising file storage backend at: /var/lib/mod_tile
debug: init_storage_backend: initialising file storage backend at: /var/lib/mod_tile
renderd[16811] <Info>: Loading parameterization function for
debug: init_storage_backend: initialising file storage backend at: /var/lib/mod_tile
debug: init_storage_backend: initialising file storage backend at: /var/lib/mod_tile
renderd[16811] <Info>: Loading parameterization function for
renderd[16811] <Info>: Loading parameterization function for
renderd[16811] <Info>: Loading parameterization function for
Mapnik LOG> 2017-06-10 04:07:37: warning: unable to find face-name 'unifont Medium' in FontSet 'fontset-0'
最后,我尝试加载一个特定的磁贴,比如使用我的本地地址:localhost/osm_tiles/8/251/160.png。渲染守护进程提供以下调试输出:

renderd[17950] <Debug>: DEBUG: Got incoming connection, fd 4, number 1
renderd[17950] <Debug>: DEBUG: Got incoming request with protocol version 2
renderd[17950] <Debug>: DEBUG: Got command RenderPrio fd(4) xml(default), z(8), x(251), y(160), mime(image/png), options()
renderd[17950] <Debug>: DEBUG: START TILE default 8 248-255 160-167, new metatile
renderd[17950] <Debug>: Rendering projected coordinates 8 248 160 -> 18785164.071375|-6261721.357125 20037508.342800|-5009377.085700 to a 8 x 8 tile
renderd[17950] <Debug>: DEBUG: DONE TILE default 8 248-255 160-167 in 6.177 seconds
debug: Creating and writing a metatile to /var/lib/mod_tile/default/8/0/0/0/250/128.meta
renderd[17950] <Debug>: DEBUG: Sending render cmd(3 default 8/251/160) with protocol version 2 to fd 4
renderd[17950] <Info>: DEBUG: Failed to read cmd on fd 4
renderd[17950] <Debug>: DEBUG: Connection 0, fd 4 closed, now 0 left
然后一切都结束了,没有别的事情发生。对此我真的不太了解,所以欢迎提出任何建议。如果有帮助的话,我也可以提供我的配置文件

“未能读取fd上的cmd”消息实际上不是一个错误,它实际上只是一点调试日志记录。有关引入它的更改的详细信息,请参见的顶部。如果您只是想“看不到该消息”,那么我从中派生的版本(用于其他一些更改)可能会很有用,因为我在那里删除了该消息


然而,这并不能解决您的根本问题(获得一个工作的磁贴服务器)——为此,我建议您要么为MacOS找到一个“从汤到坚果”的安装指南,要么从一开始,这样您就可以了解在Ubuntu虚拟机中的磁贴服务器是如何组合在一起的

以防有人碰巧遇到保存问题。问题来自apache默认加载的apple模块(mod_hfs_apple.so)。为了解决这个问题,我只需进入/etc/apache2/httpd.conf并对以下行进行注释:
LoadModule hfs\u apple\u module libexec/apache2/mod\u hfs\u apple.so

这个破解对我来说不是很满意,目标是纠正mod_tile。看起来需要修复的部分位于mod_tile中。c:1643:

static void register_hooks(__attribute__((unused)) apr_pool_t *p)
{
   ...
   ap_hook_translate_name(tile_translate, NULL, NULL, APR_HOOK_MIDDLE);
   ...
}
目前,我没有勇气找到真正的解决方案,只是快速浏览一下,我发现这条奇怪的线可能会给任何试图阅读请求的人(例如,mod_hfs_apple)带来问题。在mod_tile.c:1278中:

static int tile_translate(request_rec *r)
{
   ...
               r->filename = NULL; 
   ...
}

告诉OP“要获得一个工作的tile服务器,在web上找到一个指南或使用一个预构建的VM”并不是一个答案。严格地说,建议提问者使用是对这里直接提出的问题的回答。它没有解决导致询问有关此症状的问题的根本问题(平铺服务器没有呈现平铺)。多年来,我一直坚持“不”,有人问我这方面的问题,我的经验表明,“找到汤到坚果的说明或使用虚拟机”是最有效的建议。与此相关的是,在提出建议之前,我环顾了很多年,寻找与Windows或其他操作系统相当的东西。如果您想为Macos提供本机指南,请提供!-前往并在那里作出贡献。
[core:trace5] [pid 18636] protocol.c(643): [client ::1:56548] Request received from client: GET /osm_tiles/8/251/160.png HTTP/1.1
...
[tile:debug] [pid 18636] ./src/mod_tile.c(1306): [client ::1:56548] tile_translate: testing baseuri(/osm_tiles/) name(default) extension(png)
[tile:debug] [pid 18636] ./src/mod_tile.c(1352): [client ::1:56548] tile_translate: request for default was 251 160 256
[tile:debug] [pid 18636] ./src/mod_tile.c(324): [client ::1:56548] get_storage_backend: Retrieving storage back end for tile layer 0 in pool 7fb684031628 and thread -1075362880
[tile:debug] [pid 18636] ./src/mod_tile.c(338): [client ::1:56548] get_storage_backend: No storage backends for this lifecycle 7fb684031628, creating it in thread -1075362880
[tile:debug] [pid 18636] ./src/mod_tile.c(353): [client ::1:56548] get_storage_backend: No storage backend in current lifecycle 7fb684031628 in thread -1075362880 for current tile layer 0
[tile:debug] [pid 18636] ./src/mod_tile.c(1391): [client ::1:56548] tile_translate: op(tile_serve) xml(default) mime(image/png) z(8) x(251) y(160)
[tile:info] [pid 18636] [client ::1:56548] tile_storage_hook: handler(tile_serve), uri(/osm_tiles/8/251/160.png)
[tile:debug] [pid 18636] ./src/mod_tile.c(374): [client ::1:56548] tile_state: determined state of default 251 160 8 on store 7fb683502f90: Tile size: 317572, expired: 0 created: 1497065892
[tile:debug] [pid 18335] ./src/mod_tile.c(176): [client ::1:56547] Connecting to renderd on Unix socket /var/run/renderd/renderd.sock
[tile:info] [pid 18335] [client ::1:56547] Requesting style(default) z(8) x(251) y(160) from renderer with priority 5
[authz_core:debug] [pid 18636] mod_authz_core.c(834): [client ::1:56548] AH01628: authorization result: granted (no directives)
[core:trace3] [pid 18636] request.c(296): [client ::1:56548] request authorized without authentication by access_checker_ex hook: /osm_tiles/8/251/160.png
static void register_hooks(__attribute__((unused)) apr_pool_t *p)
{
   ...
   ap_hook_translate_name(tile_translate, NULL, NULL, APR_HOOK_MIDDLE);
   ...
}
static int tile_translate(request_rec *r)
{
   ...
               r->filename = NULL; 
   ...
}