2013-08-29 4 views
1

Я начал использовать ESI в Akamai. Они отлично работают, когда у меня есть сайт, работающий в средах int/test/stage/production, которые фактически проходят через Akamai.Имитация ESI при работе на localhost

Однако, когда мы работаем локально на ПК, мы, как правило, просто используем простой сервер причала, и сайт не подается с помощью Akamai. Это немного затрудняет, чтобы убедиться, что работа правильная, без развертывания нашего решения для Akamai.

Есть ли способ смоделировать ESI локально для разработки без использования Akamai?

ответ

1

Я не мог найти официального способа сделать это, поэтому я эмулировал ESI на стороне сервера, как если бы это был SSI, используя оператор IF в нашем freemarker.

Я использую весна, FreeMarker + Java, чтобы сделать это решение:

1) Создать макрос, который будет решать, использовать ESI или эмулировать с помощью SSI, если работает локальная (noescape может не потребоваться, зависит, как вы есть множество вещей)

<#macro esi url> 
    <#if esiUrl?contains("localhost")> 
    <#noescape>${ssiInclude(url)}</#noescape> 
    <#else> 
    <esi:include src="${esiUrl}/${url}" /> 
    </#if> 
</#macro> 

2) использовать макрос с URL < @ html.esi URL = "мой/URL" />

3) разоблачили SSI Включить метод в Java/весной (вам нужно настроить какую-либо среду IC значение для esiUrl и сайты базового URL)

<bean id="freemarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
    ...... 
    <property name="attributesMap" ref="staticAttributesMap"/> 
</bean> 

<util:map id="staticAttributesMap"> 
    <entry key="esiUrl" value="${esi.url}" /> 

    <!-- formatters --> 
    <entry key="ssiInclude" > 
     <bean class="com.channel4.bips.web.freemarker.SsiIncludeMethodModel"> 
      <property name="urlBase" value="${base.url}/"/> 
     </bean> 
    </entry> 

</util:map> 

4) Java для эмуляции SSI в FreeMarker

import freemarker.template.TemplateMethodModel; 
import freemarker.template.TemplateModelException; 
import org.apache.commons.lang.Validate; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.URL; 
import java.util.List; 

public class SsiIncludeMethodModel implements TemplateMethodModel { 
    private String urlBase; 

    @Override 
    public Object exec(List list) throws TemplateModelException { 
     String uri = (String) list.get(0); 
     Validate.notNull(uri); 
     return readContents(urlBase + uri.trim()); 
    } 

    public String readContents(String address) { 
     StringBuilder contents = new StringBuilder(2048); 
     BufferedReader br = null; 

     try { 
      URL url = new URL(address); 
      br = new BufferedReader(new InputStreamReader(url.openStream())); 
      String line; 
      while ((line = br.readLine()) != null) { 
       contents.append(line); 
      } 
     } catch (IOException x) { 
      x.printStackTrace(); 
      return "Error getting SSI data"; 
     } finally { 
      close(br); 
     } 

     return contents.toString(); 
    } 

    private static void close(Reader br) { 
     try { 
      if (br != null) { 
       br.close(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void setUrlBase(String urlBase) { 
     this.urlBase = urlBase; 
    } 
} 
0

Брюс - Я думаю здесь вслух, но вы пробовали модифицировать файл хоста? Я уверен, что ESI нуждается в обработке на сервере Akamai Edge Server, но если вы можете изменить его, чтобы сказать, что Staging-сервер Akamai, вы должны проверить его локально?

Опять же, я просто задумываюсь здесь.

+0

привет там, я не уверен, что изменение файла хост будет работать. На данный момент это отображается в браузере . Браузер не делает запрос на бэкэнд, поскольку он не знает, что означает этот тег. Спасибо, в любом случае –

3

Вы можете настроить ETS (ESI тестового сервера компании Akamai) в виртуальной машине и обратный прокси-сервер обратно на ваш сервер localhost. Раньше я делал что-то подобное с Vagrant.

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