2013-03-07 62 views
1

我正在使用正確的NEO4J_URL環境變量,如heroku config所示。 如果我通過瀏覽器使用相同的neo4j url,它可以正常工作(沒有認證失敗)。但是,我的應用程序無法從heroku下面的錯誤開始。 (我正在使用spring-data-neo4j)在Heroku上爲Neo4j REST網址'錯誤401未授權'

該URL看起來像http://username:[email protected]:1234/db/data/。在最後沒有'/ db/data'的時候試過,也沒有結尾的斜槓。沒有幫助。

如果有人已經遇到/解決了這個問題,請幫忙。在服務器啓動時的堆棧跟蹤:

←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m Caused by: 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.index.RestIndexManager.existsForNodes(RestIndexManager.java:45) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m java.lang.RuntimeException: Error reading as JSON '<html>|<head>|<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>|<tit 
le>Error 401 UNAUTHORIZED</title>|</head>|<body><h2>HTTP ERROR 401</h2>|<p>Problem accessing /db/data/index/node. Reason:|<pre> UNAUTHORIZED</pre></p><hr /><i><small>Powered by Jetty://</ 
small></i><br/>            |<br/>            |<br/>            |<br/> 
            |<br/>            |<br/>            |<br/> 
     |<br/>            |<br/>            |<br/>            |<br/> 
           |<br/>            |<br/> 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.util.JsonHelper.jsonToSingleValue(JsonHelper.java:62) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.RequestResult.toEntity(RequestResult.java:114) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m      |<br/>            |<br/>            |<br/> 
             |<br/>            |<br/>            |<br/> 
      |<br/>            ||</body>|</html>|' 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.RequestResult.toMap(RequestResult.java:120) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.util.JsonHelper.readJson(JsonHelper.java:57) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.index.RestIndexManager.indexInfo(RestIndexManager.java:50) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory.chooseStrategy(TypeRepresentationStrategyFactor 
y.java:56) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.neo4j.rest.graphdb.ExecutingRestAPI.indexInfo(ExecutingRestAPI.java:327) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.springframework.data.neo4j.config.Neo4jConfiguration$$EnhancerByCGLIB$$36bc2a37.CGLIB$typeRepresentationStrategyFactory$7(<generated>) 
←[36m2013-03-06T23:44:31+00:00 app[web.1]:←[0m at org.springframework.data.neo4j.rest.SpringRestGraphDatabase.getIndex(SpringRestGraphDatabase.java:100 
+0

你可以從你的heroku應用程序插件管理頁面打開webui嗎? – 2013-03-07 11:49:38

+0

是的,我可以看到儀表板。只有節點 - 'root' – Gopi 2013-03-07 12:23:35

+1

你可以使用帶有用戶名/密碼的構造函數嗎?並從URL中提取它們? – 2013-03-10 02:36:12

回答

1

正如@MichaelHunger建議我使用其他SpringRestGraphDatabase構造這需要用戶名和密碼作爲單獨的參數,現在新的數據庫訪問。

我前面Spring上下文這個樣子

<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase"> 
    <constructor-arg index="0" value="${NEO4J_URL}" /> 
</bean> 

現在我把它改成如下,一切工作正常!在這裏我通過兩個額外的環境變量提供用戶名和密碼。是的,在設置heroku上的用戶名和密碼環境變量方面有一些小小的手動工作(或者更不用說,您可以在應用程序中硬編碼)。這是在添加neo4j heroku插件後自動可用的NEO4J_URL環境變量的補充。

<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase"> 
    <constructor-arg index="0" value="${NEO4J_URL}" /> 
    <constructor-arg index="1" value="${NEO4J_USERNAME}" /> 
    <constructor-arg index="2" value="${NEO4J_PASSWORD}" /> 
</bean> 

謝謝@MichaelHunger!

+1

也許有些事情已經改變在heroku neo4j插件。現在,只有一個環境變量'NEO4J_URL',其中包含用戶名和密碼以'username:password @ host:port'格式。 – 2013-04-30 18:27:23