O contêiner de servlet jruby-rack suporta PUT/DELETE?
-
09-12-2019 - |
Pergunta
Estou tentando implantar um aplicativo Rails como WAR usando Warbler.Eu estou rodando no Tomcat 6 e parece estar funcionando bem.Contudo, todos os meus PUT
e DELETE
solicitações estão sendo rejeitadas com um 403 (Forbidden)
.
Pelo que consegui reunir, a instalação padrão do Tomcat no Debian/Ubuntu tem esses métodos desabilitados por meio de:
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
Eu tentei definir isso para false
no meu /etc/tomcat6/web.xml
mas sem dados.Eu me pergunto se tenho que fazer algo semelhante ao jruby-rack
contêiner de servlet empacotado pelo Warbler no meu WAR?Se sim, como eu faria isso?
Se não, por que o Tomcat estaria rejeitando todos os PUT
areia DELETE
está sendo enviado para meu aplicativo Rails?
Solução
Apenas para detalhes adicionais, aqui está o bug relevante no jruby-rack:
https://github.com/jruby/jruby-rack/issues/105
Parece que uma correção está em andamento no momento em que este artigo foi escrito.
Outras dicas
Eu tive o mesmo problema.Mudei a versão da gem jruby-rack de 1.1.5 para 1.1.4 e agora funciona bem.
para registro de questões como essas - específicas para o RackFilter
sempre se pode tentar usar o modo de operação do servlet como solução alternativa, basta remover a declaração do filtro (e o mapeamento) e declarar e mapear o RackServlet
:
<!--
<filter>
<filter-name>RackFilter</filter-name>
<filter-class>org.jruby.rack.RackFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RackFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>-->
<servlet>
<servlet-name>RackServlet</servlet-name>
<servlet-class>org.jruby.rack.RackServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RackServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
caso você esteja usando toutinegra copie o web.xml.erb dentro de voce configuração diretório:
cp [GEM_HOME]/gems/warbler-1.3.4/web.xml.erb config