Установка Fusebox без доступа к webroot - PullRequest
2 голосов
/ 21 мая 2009

Ранее (и локально) я поместил каталог fusebox5 в корневой веб-каталог, и затем приложения из любой точки дерева смогли получить к нему доступ. Ранее я также использовал Application.cfm, а не .cfc.

В этой среде у меня нет доступа к webroot, и файлы FB на самом деле не обязательно должны быть так далеко, так что я планировал хранить их вместе с приложениями. Правильно ли я считаю, что index.cfm упускается из виду, если Application.cfc используется (и поэтому нет смысла менять значение cfinclude, например, на .../fusebox5/)? Если так, как я могу включить фреймворк, не имея Fusebox в корне или в отображении? Ошибка:

Could not find the ColdFusion Component or Interface fusebox5.Application. 

Ответы [ 3 ]

2 голосов
/ 21 мая 2009

Нет, вашему приложению по-прежнему понадобится index.cfm. Что вам нужно, так это сопоставление приложения cf для Fusebox в вашем Application.cfc. Посмотрите на шаблон Рэя Камдена *1001* Application.cfc для примера установки специфических для приложения отображений.

1 голос
/ 21 мая 2009

Вы можете запустить Fusebox 5+ в подпапке корня вашего приложения. Возможно, это не самая очевидная вещь, чтобы заставить его работать.

К сожалению, вы не можете создать динамическое отображение для расширения Application.cfc, потому что ваш Application.cfc еще не был создан - вы получаете сценарий «курица против яйца». Вы не можете создать сопоставление для Fusebox, потому что ваш Application.cfc не запустился, вы не можете запустить ваш Application.cfc, потому что он не может найти компонент, который должен расширить.

Это ошибка в COLDFUSION 8. ColdFusion должен искать сопоставления в следующем порядке:

  • Сопоставленные папки от администратора CF
  • Подкаталоги вне текущего каталога
  • Подкаталоги вне корневого веб-каталога с именем

Это происходит при использовании CreateObject (), но не при использовании атрибута Extends в cfcomponent.

Самое простое решение - использовать ваш Application.cfc так же, как вы бы это делали для любого приложения, а затем включить fusebox из вашего index.cfm. Структура вашей папки будет выглядеть так:

/myapp/fusebox5/
/myapp/index.cfm
  -- consists of <cfinclude template="fusebox5/fusebox5.cfm" />

Ваш файл index.cfm не будет игнорироваться, если вы не перехватываете запрос с помощью OnRequest Application.cfc или, если вы используете OnRequest, убедитесь, что вы включили предполагаемую цель (которая почти всегда будет index.cfm в любом случае).

Если вы не хотите, чтобы index.cfm выполнял включение, вы можете сделать так, чтобы метод OnRequest вашего Application.cfc сделал cfinclude.

<cffunction name="onRequest">
    <cfinclude template="fusebox5/fusebox5.cfm">
</cffunction>

Вам все еще может понадобиться index.cfm, чтобы ваш веб-сервер не давал список каталогов или 404, но это нормально, если файл пуст.

0 голосов
/ 21 мая 2009

В Application.cfc:

<cfscript>
    this.mappings = {}; //create a new structure to store app-specific mappings
    this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping
</cfscript>
...