2013-04-04 72 views
3

我正嘗試在Openshift上用DIY墨盒部署一個最小化的Scalatra應用程序。我已經成功地得到SBT的工作,但是當涉及到container:start,我得到的錯誤:在Openshift上設置Scalatra應用程序 - 設置Jetty IP

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

顯然,嵌入式碼頭試圖在0.0.0.0打開插座,這是由Openshift禁止(你只能在$ OPENSHIFT_INTERNAL_IP開放端口)。我怎樣才能知道Jetty究竟需要哪個IP來聽呢?

+0

您可以分享您的openshift定製嗎? – Salil 2013-05-12 11:10:39

回答

0

我從來沒有使用過Openshift,所以我在這裏摸索了一下。

您是否有jetty.host套件?

您可能需要設置一個jetty.xml文件並將其設置在那裏。有關如何設置主機,請參閱http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty。您可以通過設置您的項目像這樣講述的jetty.xml的xsbt Web插件:

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

或者,你可以在啓動過程中的參數傳遞到碼頭。這看起來像這樣:-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嵌入到scalatra中的jetty中? – 2013-04-04 17:36:34

0

要獲得碼頭9.2.13運行.v20150730在使用DIY墨盒的Openshift上,您必須使用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--port設置爲綁定到正確的接口並運行buil t戰爭文件。它所要求的是將jetty-runner.jar從常春藤緩存中複製到目標文件夾中。與Maven這樣做,你加入類似:

 <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> 

谷歌表明,SBT相當於簡直是retrieveManaged := true。您可以ssh到主機並運行find來確定jetty-runner.jar依賴項已被複制到哪裏,並適當更新啓動命令。