2010-12-10 12 views
6

मैं रिमोट सर्वर पर टॉमकैट 6 के तहत एक युद्ध को तैनात करने पर काम कर रहा हूं। अब अगर मैं अपनी स्थानीय मशीन पर तैनात करता हूं तो सब कुछ ठीक काम करता है। रिमोट परिनियोजन अपवादों का एक बहुत ही असभ्य सेट ट्रिगर करता है।Grails परिनियोजन मुद्दे (WAR & Tomcat)

log4j:ERROR setFile(null,true) call failed. 
java.io.FileNotFoundException: stacktrace.log (Permission denied) 
    at java.io.FileOutputStream.openAppend(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:207) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:131) 
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) 
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    <...snip> 
ERROR initWebApplicationContext, Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    at java.lang.Thread.run(Thread.java:636) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    ... 1 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    ... 1 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    ... 1 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    ... 1 more 
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    ... 1 more 
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied)) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) 
    at $Proxy15.getMetaData(Unknown Source) 
    ... 1 more 
Caused by: java.sql.SQLException: File input/output error prodDB.properties java.io.FileNotFoundException: prodDB.properties.new (Permission denied) 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source) 
    at org.hsqldb.jdbcDriver.getConnection(Unknown Source) 
    at org.hsqldb.jdbcDriver.connect(Unknown Source) 
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294) 
    at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221) 
    ... 3 more 

मैं डेटाबेस के रूप में HSQLDB का उपयोग कर रहा हूं।

टोमकैट सेवा के रूप में चलाया जाता है, इसलिए कोई अनुमति समस्या नहीं होनी चाहिए। क्या मुझे किसी चीज़ पर अनुमतियां बदलने की ज़रूरत है (यदि ऐसा है, क्योंकि मुझे कोशिश की गई पहुंच नहीं मिल रही है)? क्या कोई कॉन्फ़िगरेशन विकल्प है जिसे मैं Grails में लॉग इन या लॉगिंग रीडायरेक्ट करने के लिए सेट कर सकता हूं?

उत्तर

20

यह लॉगिंग के बारे में नहीं है, यह "prodDB.properties" के बारे में है। आपको FileNotFoundException मिल रहा है क्योंकि यह इसे लिख नहीं सकता (या संभवतः नाम बदल सकता है)। ऐप चलाने वाले उपयोगकर्ता को निर्देशिका में लेखन अनुमति नहीं होनी चाहिए जहां यह HSQLDB डेटाबेस फ़ाइलों को बना रहा है।

डिफ़ॉल्ट config एक रिश्तेदार पथ का उपयोग करता है, तो जहाँ भी ऐप्लिकेशन से लॉन्च कर रहा है यह लिख रही:

production { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:hsqldb:file:/some/writeable/folder/prodDb;shutdown=true" 
    } 
} 

:

production { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:hsqldb:file:prodDb;shutdown=true" 
    } 
} 

एक ठीक हार्ड कोड को DataSource.groovy में मार्ग है कॉन्फ़िगर.groovy में बाहरी कॉन्फ़िगरेशन फ़ाइलों को सक्षम करना बेहतर है:

grails.config.locations = ["classpath:${appName}-config.groovy"] 

और crea ते foo-config.groovy युक्त $ TOMCAT_HOME/lib जो बिलाव के classpath में (परिवर्तन आपके एप्लिकेशन नाम के foo) है में

dataSource { 
    url = "jdbc:hsqldb:file:/some/writeable/folder/prodDb;shutdown=true" 
} 

और डाल foo-config.groovy। इस तरह आप कई स्थानों पर युद्ध को तैनात कर सकते हैं और Config.groovy में एक ही मान को हार्ड-कोडिंग के बजाय केवल एक कॉन्फ़िगर फ़ाइल ओवरराइड कर सकते हैं।

1

जब मैंने विंडोज 7 में अपग्रेड किया तो अचानक मुझे इस समस्या का सामना करना पड़ा। मैं टॉमकैट शुरू करने के लिए शॉर्टकट का उपयोग कर रहा था और मैंने "स्टार्ट इन" निर्देशिका को केवल सादा "सी: \" पर सेट किया था। विंडोज 7 गैर-व्यवस्थापक उपयोगकर्ताओं को इस निर्देशिका में लिखने नहीं देता है। मैंने "टॉमकैटडाटा" नामक अपने उपयोगकर्ता घर की एक उपनिर्देशिका बनाई और वहां से टॉमकैट शुरू करने के लिए अपना शॉर्टकट बदल दिया। सब कुछ ठीक काम करता है।

संबंधित मुद्दे