Как мне настроить Ghost в dev и production, чтобы данные json были доступны через url для загрузки с d3.json? - PullRequest
0 голосов
/ 06 февраля 2019

Здравствуйте, я создал собственную тему Ghost для блога, который я запускаю, и я хотел бы создать карту на статической странице, используя d3, но я застрял при загрузке данных geo json.D3.json требует, чтобы данные были доступны через URL, и я не смог выяснить, как настроить Ghost, чтобы сделать это возможным.

Первым делом я попытался поместить файл custom.geo.json в

/content/themes/my-theme/assets/images/custom.geo.json

. Я понимаю, что это глупое место, но я загрузил изображения и значки из этого каталога, чтобы онказалось доступным.Я попытался поместить его в

/content/themes/my-theme/

мой conifg.development.json выглядит так:

{
  "url": "http://localhost:2368/",
  "server": {
    "port": 2368,
    "host": "127.0.0.1"
  },
  "database": {
    "client": "sqlite3",
    "connection": {
      "filename": "/Users/allisonmadigan/blog/dev/content/data/ghost-local.db"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "local",
  "paths": {
    "contentPath": "/Users/allisonmadigan/blog/dev/content"
  }

route.yaml: 
routes:
  /:
    controller: channel
    data: page.home
    template: 
      - home
collections:
  /blog/:
    permalink: /blog/{slug}/
    template: 
      - index

taxonomies:
  tag: /tag/{slug}/
  author: /author/{slug}/

Мой код Javascript

// get map data
d3.json(
  "/data/custom.geo.json", function(json) {
    //Bind data and create one path per GeoJSON feature
    countriesGroup = svg.append("g").attr("id", "map");
    // add a background rectangle
    countriesGroup
      .append("rect")
      .attr("x", 0)
      .attr("y", 0)
      .attr("width", w)
      .attr("height", h);

Я получаю ошибкуэто:

d3.min.js:7 GET http://localhost:2368/data/custom.geo.json/ 404 (Not Found)

Я даже пытался в разработке запустить Python SimpleHTTPServer, но потом javascript попытался перейти на

http://localhost:2368/http://localhost:8000/blog/dev/content/themes/mytheme/data/custom.geojson

Я в растерянности ...

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Если вы не хотите менять ghost-маршрутизацию и у вас есть nginx в качестве обратного прокси-сервера перед ghost, вы можете использовать json с помощью директивы location.

См. Эскиз конфигурации.

server {
     ...
     ...
    location / {
        proxy_pass http://localhost:2368;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }
}
location /data/geo.json {
    alias path/to/geo.json;
}
0 голосов
/ 08 февраля 2019

Я также отправил сообщение в сообщество Ghost, и у одного очень милого человека было решение.Он сказал, что Ghost не отправляет файлы json из тем по соображениям безопасности.Он рекомендовал использовать «функцию типа содержимого в динамической маршрутизации для« рендеринга »шаблона (который на самом деле является файлом json)».

Так что теперь мой файл route.yaml выглядит как

routes:
  /:
    controller: channel
    data: page.home
    template: 
      - home
  /data/geo/:
    template: 
    - geo
    content-type: json
collections:
  /blog/:
    permalink: /blog/{slug}/
    template: 
      - index

taxonomies:
  tag: /tag/{slug}/
  author: /author/{slug}/

Я переименовал custom.geo.json в geo.hbs и оставил в папке темы.

и мой код js:

d3.json(
  "/data/geo/", function(json) {
...