2013-04-04 3 views
3

Я пытаюсь развернуть минимальное приложение Scalatra на Openshift с картриджем DIY. Я сумел получить SBT работу, но когда дело доходит до container:start, я получаю ошибку:Приложение Scalatra на Openshift - настройка Jetty IP

FAILED [email protected]:8080: java.net.SocketException: Permission denied 

Видимо, встроенный Jetty пытается открыть сокет на 0.0.0.0, которая запрещена OpenShift (вы можете только открыть порты в $ OPENSHIFT_INTERNAL_IP). Как я могу сказать Jetty, какой IP-адрес мне нужен для прослушивания?

+0

Не могли бы вы поделиться своей настройкой для сперва? – Salil

ответ

0

Я никогда не использовал Openshift, поэтому я немного нащупываю здесь.

У вас есть комплект jetty.host?

Возможно, вам потребуется установить файл jetty.xml и установить его там. См. http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty о том, как установить хост. Вы можете сказать xsbt веб-плагин о jetty.xml, установив свой проект вверх, как это:

https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

В качестве альтернативы, вы можете быть в состоянии передать параметр в Jetty во время запуска. Это будет выглядеть так: -Djetty.host="yourhostname"

2

Да Вы правы в $ OPENSHIFT_INTERNAL_IP. Так редактировать $ {jetty.home} /etc/jetty.xml и установить jetty.host в соединительной секции следующим образом: ... ..

<Set name="connectors"> 
    <Array type="org.mortbay.jetty.Connector"> 
    <Item> 
    <New class="org.mortbay.jetty.nio.SelectChannelConnector"> 
     <Set name="host"><SystemProperty name="jetty.host" />$OPENSHIFT_INTERNAL_IP</Set> 
     <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set> 
     ... 
    </New> 
    </Item> 
</Array> 
</Set> 

НТН

+0

Спасибо! Я бы хотел, но где я могу найти (или где разместить) jetty.xml в случае причала, встроенного в скаляру? –

0

Чтобы работает с причалом 9.2.13 .v20150730 на Openshift с картриджем DIY, который вы должны запустить с помощью Java8, чтобы он работал на $OPENSHIFT_INTERNAL_IP следующим образом. Первый SSH на хост и скачать jdk8 с

cd $OPENSHIFT_DATA_DIR 
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.tar.gz 
tar -zxf jdk-8u5-linux-x64.tar.gz 
export PATH=$OPENSHIFT_DATA_DIR/jdk1.8.0_05/bin:$PATH 
export JAVA_HOME="$OPENSHIFT_DATA_DIR/jdk/jdk1.8.0_05" 
java -version 

Тогда в вашем .openshift\action_hooks\start чтобы иметь одни и те же экспортируемые переменные с чем-то вроде:

# see http://stackoverflow.com/a/23895161/329496 to install jdk1.8 no DIY cartridge 
export JAVA_HOME="$OPENSHIFT_DATA_DIR/jdk/jdk1.8.0_05" 
export PATH=$OPENSHIFT_DATA_DIR/jdk1.8.0_05/bin:$PATH 
nohup java -cp ${OPENSHIFT_REPO_DIR}target/dependency/jetty-runner.jar org.eclipse.jetty.runner.Runner --host ${OPENSHIFT_DIY_IP} --port ${OPENSHIFT_DIY_PORT} ${OPENSHIFT_REPO_DIR}/target/thinbus-srp-spring-demo.war > ${OPENSHIFT_LOG_DIR}server.log 2>&1 & 

(Обратите внимание, что jdk-8u20-linux-x64.tar.gz также сообщалось работать так вы можете проверить наличие последних.)

Эта установка не нуждается в jetty.xml, так как она устанавливает --host и для привязки к правильному интерфейсу и запуска buil t файл войны. Для этого требуется, чтобы jetty-runner.jar копировался из кэша плюща в целевую папку. С мавена делать, что вы добавить что-то вроде:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>org.eclipse.jetty</groupId> 
           <artifactId>jetty-runner</artifactId> 
           <version>${jetty.version}</version> 
           <destFileName>jetty-runner.jar</destFileName> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Google предполагают, что эквивалентно SBT просто retrieveManaged := true. Вы можете передать ssh хосту и запустить find, чтобы выяснить, где была скопирована зависимость jetty-runner.jar и соответствующим образом обновить команду запуска.

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