2015-05-12 4 views
1

Я создаю небольшое веб-приложение, которое подается с данными в реальном времени. Данные предоставлены компанией Erlang с использованием Cowboy. Для простоты я хотел бы, чтобы Cowboy также обслуживал статические файлы для веб-страницы. Но, похоже, Cowboy не распознает, если файлы изменены на диске, продолжая обслуживать старую версию.Статический файловый обработчик Cowboy обслуживает старые версии файлов

Я попытался отключить etags и очистить кеш браузера, что не увенчалось успехом. Пока только перезагрузка всего приложения Erlang работает, что очень утомительно (по крайней мере, во время разработки). Есть ли способ отключить механизм кэширования Cowboy или сообщить об изменениях файла?

Cowboy настроечный код:

start(_StartType, _StartArgs) -> 
    % setup cowboy 
    Dispatch = cowboy_router:compile([{'_', 
             [{"/", cowboy_static, {priv_file, app_name, "static/index.html"}}, 
             {"/[...]", cowboy_static, {priv_dir, app_name, "static"}}]}]), 
    {ok, _} = cowboy:start_http(http_listener, 5, [{port, 12345}], [{env, [{dispatch, Dispatch}]}]), 
    sup:start_link(). 

На стороне записки, это иронично, что Ковбой тщательно формирует ETags на основе времени изменения файла и размер, но когда измененный файл запрашивается он просто отвечает со старым ETAG вместо проверки изменений.

С наилучшими пожеланиями, clonejo

ответ

1

Оказалось, что relx скопировал priv_dir при создании релиза, обслуживающих копии, а я продолжал редактирование исходных файлов (найти очень полезно, когда изменения в HTML файлах не дозвониться ваш браузер)

Вместо строительства и запуск релизов во время разработки я обернул code:priv_dir/1 (подобно тому, что Никол Skoric shared on the erlang-questions mailing list in 2011) и пропустить выпуски при разработке:.

start(_StartType, _StartArgs) -> 
    % setup cowboy 
    Dispatch = cowboy_router:compile([{'_', 
             [{"/", cowboy_static, {file, util:priv_dir() ++ "/static/index.html"}}, 
             {"/[...]", cowboy_static, {dir, util:priv_dir() ++ "/static"}}]}]), 
    {ok, _} = cowboy:start_http(http_listener, 5, [{port, 12345}], [{env, [{dispatch, Dispatch}]}]), 
    sup:start_link(). 

-module(util). 

priv_dir() -> 
    case code:priv_dir(app_name) of 
     {error, bad_name} -> 
      {ok, Cwd} = file:get_cwd(), 
      Cwd ++ "/" ++ "priv"; 
     Priv -> 
      Priv 
    end. 
+0

файл: get_cwd(), вероятно, не самый лучший вариант, если вы хотите этого избежать, вместо этого вы можете установить переменную env. – clonejo

 Смежные вопросы

  • Нет связанных вопросов^_^