जेम्स का जवाब जेटी को हेरोकू पर काम करने के लिए अच्छे निर्देश प्रदान करता है, और उनकी टिप्पणी में एम्बेडेड टोमकैट का उपयोग करने के लिए एक अच्छे संदर्भ का एक लिंक शामिल है। लेकिन हेरोकू पर टॉमकैट के मानक, स्टैंडअलोन संस्करण को चलाने के लिए भी संभव है। यहाँ कैसे मैं यह काम करने के लिए प्राप्त करने में सक्षम था है:
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<configuration>
<container>
<containerId>tomcat6x</containerId>
<zipUrlInstaller>
<url>http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.zip</url>
</zipUrlInstaller>
<dependencies>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
</dependencies>
</container>
<configuration>
<type>standalone</type>
<deployables>
<deployable>
<groupId>com.yourcompany.name</groupId>
<artifactId>yourArtifact</artifactId>
<type>war</type>
<properties>
<context>ROOT</context>
</properties>
</deployable>
</deployables>
</configuration>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>install</goal>
<goal>configure</goal>
<goal>deploy</goal>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
:
पहले, स्थापित बिलाव उदाहरण के लिए स्थापित करने के लिए और अपने निर्माण के हिस्से के रूप बिलाव कॉन्फ़िगर करें, और भी तैनात करने के लिए अपने आवेदन अपने पोम की स्थापना
इसके बाद, एक छंटनी डाउन server.xml
फ़ाइल कि Heroku पर काम करेंगे बनाएँ:
<?xml version='1.0' encoding='utf-8'?>
<Server port="-1">
<Listener className="org.apache.catalina.core.JasperListener" />
<Service name="Catalina">
<Connector port="${http.port}" protocol="HTTP/1.1" connectionTimeout="20000"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"/>
</Engine>
</Service>
</Server>
... यह आवश्यक है क्योंकि आपके Heroku एप्लिकेशन केवल एक ही बंदरगाह के लिए बाध्य करने के लिए (जो हर बार एक नया उदाहरण में परिवर्तन की अनुमति दी है बनाया गया है, औरमें निर्दिष्ट हैपर्यावरण चर)। किसी भी अन्य बंदरगाह से बांधने का प्रयास आपके ऐप को दुर्घटनाग्रस्त कर देगा। चूंकि बंदरगाह गतिशील है, इसे पर http.port
सिस्टम प्रॉपर्टी के माध्यम से पारित किया जाना चाहिए, लेकिन हम बाद में उस पर पहुंच जाएंगे।
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="quiz_devel">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show.sql" value="true"/>
<property name="hibernate.c3p0.acquire_increment" value="1"/>
<property name="hibernate.c3p0.idle_test_period" value="10"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.max_statements" value="40"/>
<property name="hibernate.c3p0.min_size" value="1"/>
<property name="hibernate.c3p0.timeout" value="30"/>
</properties>
</persistence-unit>
</persistence>
नोट है कि वहाँ कोई hibernate.connection.url
यहाँ निर्दिष्ट:
आप उस पर होते हैं, यह भी एक persistence.xml
फ़ाइल कि Heroku के साथ काम करेंगे पैदा करते हैं। ऐसा इसलिए है क्योंकि हेरोोकू डेटाबेस यूआरएल निर्दिष्ट करता है कि आपके ऐप को $DATABASE_URL
पर्यावरण चर में उपयोग करना चाहिए।
- यह:
#point to the correct configuration and webapp
CATALINA_BASE=`pwd`/target/cargo/configurations/tomcat6x
export CATALINA_BASE
#copy over the Heroku config files
cp ./server-heroku.xml ./target/cargo/configurations/tomcat6x/conf/server.xml
cp ./persistence-heroku.xml ./target/cargo/configurations/tomcat6x/webapps/ROOT/WEB-INF/classes/META-INF/persistence.xml
#make the Tomcat scripts executable
chmod a+x ./target/cargo/installs/apache-tomcat-6.0.18/apache-tomcat-6.0.18/bin/*.sh
#set the correct port and database settings
JAVA_OPTS="$JAVA_OPTS -Dhttp.port=$PORT -Dhibernate.connection.url=$DATABASE_URL"
export JAVA_OPTS
#start Tomcat
./target/cargo/installs/apache-tomcat-6.0.18/apache-tomcat-6.0.18/bin/catalina.sh run
यह चीजों के एक नंबर कर रही है:
अब यह एक सरल खोल स्क्रिप्ट है कि पर्यावरण को कॉन्फ़िगर करता है और सब कुछ सेट अप ताकि बिलाव वास्तव में चला सकते हैं बनाने के लिए समय आ गया है सही जगह पर इंगित करने के लिए CATALINE_BASE
सेट करके, अपने निर्माण के हिस्से के रूप में पैक किए गए कार्गो को कॉन्फ़िगरेशन और तैनाती कलाकृतियों का उपयोग करने के लिए टॉमकैट को बताता है।
- यह डिफ़ॉल्ट
server.xml
और persistence.xml
फ़ाइलों को उनके heroku- विशिष्ट रूपों के साथ ओवरराइट करता है।
- यह टॉमकैट उदाहरण में सभी स्टार्टअप स्क्रिप्ट को चिह्नित करता है जो कि निर्माण के हिस्से के रूप में कार्गो को निष्पादन योग्य के रूप में स्थापित किया जाता है।
- यह हेरोोकू मंच द्वारा प्रदान किए गए पर्यावरण चर के आधार पर
http.port
और hibernate.connection.url
के मानों को निर्दिष्ट करता है।
- अंत में, यह टॉमकैट चलाता है। ध्यान दें कि ऐसा करने के लिए आप
startup.sh
का उपयोग नहीं कर सकते हैं, क्योंकि startup.sh
एक नई प्रक्रिया में टॉमकैट लॉन्च करेगा और फिर समाप्त हो जाएगा। हेरोोकू इसे समझ में नहीं आता है, और सोचता है कि startup.sh
की समाप्ति टोमकैट प्रक्रिया को समाप्त कर रही है।
अंत में, अंतिम चरण में अपने Procfile
अपने स्टार्टअप स्क्रिप्ट कॉल करने के लिए स्थापित करने के लिए है, की तर्ज पर कुछ:
web: sh startServer-heroku.sh
इस दृष्टिकोण आप एक परियोजना है कि Heroku के साथ संगत है हो सकता है के साथ
, जबकि एक मानक जावा वेबपैप के रूप में स्टैंडअलोन चलाने की अपनी क्षमता को बनाए रखा है।
[jcabi-heroku-maven-plugin] (http://www.jcabi.com/jcabi-heroku-maven-plugin/index.html) पर एक नज़र डालें, जो पूरे तैनाती प्रक्रिया को हरोकू में स्वचालित करता है। शायद यह आपके मामले में मदद करेगा। – yegor256