2016-05-10 6 views
2

Я пытаюсь использовать Clojure + Compojure + Ring в сочетании с библиотекой Jos qooxdoo. Это действительно хорошо, но qooxdoo работает в двух режимах: «build» (работает для меня) и «source» (не очень хорошо). В последнем случае, JS, порожденный qooxdoo на самом деле жёстко ссылки (ну, используя относительные адреса ../../ ..) обратно в установку qooxdoo и во время выполнения он просит СТГ, как:Как опубликовать каталог с кольцевым промежуточным программным обеспечением?

http://localhost:3000/opt/qooxdoo-5.0.1-sdk/framework/source/class/qx/bom/client/OperatingSystem.js

... так как у меня есть библиотека, установленная под /opt/qooxdoo-5.0.1-sdk.

Серьезная проверка работоспособности: если я непосредственно открываю index.html в браузере, он отлично работает. Похоже, мне просто нужно выяснить, как обслуживать статические файлы под установкой/opt library install.

Я пробовал wrap-файл из ring.middleware.file, потому что это звучит так, как я хочу, но независимо от того, какой путь я ему даю, я получаю сотни 404s, когда он пытается собрать каждый файл фрейма отдельно от установленного библиотека.

Я могу работать нормально под «строить» (qooxdoo cobbles вместе с одним миниатюром .js я обслуживаю с помощью ресурса wrap-resource), но иногда мне нужно запустить в режиме источника, чтобы найти ошибки JS.

Я пропустил что-то простое?

+0

Kenny, не забудьте принять ответ, даже ваш собственный, как только вы удовлетворитесь. – ThomasH

ответ

0

Простого в самом деле: (наматывается файл «/»)

При разработке режим/источника qooxdoo отрабатывает каталог установки вместо кода втягивается в мое локальное дерево, и делает это жестко прописывать относительные пути, которые разрешаются в absolute/opt/qooxdoo-etc.

Это относится к серверу как относительный запрос «opt/qooxdoo ...», поэтому я должен был предложить root («/») в качестве каталога поиска.

+0

Извините, если это кажется очевидным, и я уверен, что попробовал это в какой-то момент в моем избиении, но, по-видимому, не в сочетании с другим недостатком. – kennytilton

0

(wrap-file "/") является серьезной проблемой безопасности, так как вы предлагаете корневой каталог для всех.

Что вы можете потенциально сделать, так это сделать целевую директорию на сервере вашим статическим файлом и обслуживать ваш контент оттуда.

su 
mkdir -p /var/clojure/static/opt 
cd /var/clojure/static/opt 
ln -s /opt/qooxdoo-5.0.1-sdk qooxdoo-5.0.1-sdk 
chown -r YOUR-USER-ID /var/clojure/static/opt 

и использовать промежуточное программное обеспечение: (wrap-file "/var/clojure/static") служить файл.

2

Правильный способ справиться с этим - настроить Qooxdoo, чтобы рассказать ему, какие URI вы хотели бы использовать - по умолчанию исходная сборка использует только относительные пути, но вы можете легко переопределить это, отредактировав config.json.

В вашем config.json у вас будет раздел «jobs», содержащий раздел «libraries», содержащий массив «library» - ваше приложение представляет собой библиотеку, как и Qooxdoo, как и любые вкладки, поэтому она будет выглядеть как-то как это:

"jobs" : { 
    "libraries" : { 
     "=library" : [ { 
      "manifest" : "${QOOXDOO_PATH}/framework/Manifest.json" 
     }, { 
      "manifest" : "Manifest.json" 
     } 
    }, 

Каждая «библиотека» объект может иметь свойство «Ури», поэтому для примера вы, вероятно, хотите что-то вроде этого:

"jobs" : { 
    "libraries" : { 
     "=library" : [ { 
      "manifest" : "${QOOXDOO_PATH}/framework/Manifest.json", 
      "uri" : "/opt/qooxdoo-5.0.1-sdk" 
     }, { 
      "manifest" : "Manifest.json" 
     } 
    }, 
0

Там есть раздел в руководстве этой сделки с выпуском serving a source version through a web server.

Я думаю, вы нашли основное представление о том, что веб-сервер должен экспортировать корневой каталог, где относительные пути, используемые в сгенерированном загрузчике, соответствуют URL-адресам этого веб-сервера. (Рациональным является то, что исходная версия использует все JS-файлы из всех задействованных библиотек непосредственно с диска.)

В худшем случае это может означать, что вам нужно экспортировать корневой файл ("/") из своего веб сервер. Поскольку вы делаете это на локальной машине разработки, это не должно быть большой проблемой. Если проблема связана с безопасностью, вы можете захотеть собрать свою среду qooxdoo под каким-то невинным путем, например/home/kenny/devel/qooxdoo, содержащий qooxdoo SDK, ваше приложение и все файлы libs/contrib, которые вы можете использовать.

Если вы следуете приведенной ссылке, вы также найдете некоторую помощь от цепочки инструментов qooxdoo. Например. если вы запустите [*], он скажет вам, какой путь на вашем локальном диске является ближайшим родительским каталогом, который будет включать все необходимые библиотеки, то есть должен быть экспортирован на ваш веб-сервер для работы исходной версии.

В качестве альтернативы, как написал Джон, вы можете экспортировать каждый qooxdoo lib через отдельный путь под своим веб-сервером, а затем сообщить основному приложению, где его можно найти. Возможно, вам действительно нужно указать правильный URL-адрес, например, http://localhost/libs/qooxdoo-5.0.1-sdk/framework, а не только путь к файловой системе, как предлагает Джон. Также помните, что вам нужно пройти до каталога, в котором находится файл манифеста (следовательно, указанный выше путь заканчивается на .../framework). См. Это manual section для глубокого погружения.