我正在尝试使用neo4j gem为Heroku部署一个jruby rails应用程序。在本地运行工作正常但是当我在Heroku结束时按#new(// new)时,我得到:
NoMethodError (undefined method `reference_node' for nil:NilClass):
在[一些研究] [1]之后,我的Neo4j服务器似乎还没有运行。
所以我必须这样做
heroku run rails console
然后
Neo4j.start
..为了让我的应用运行起来。但是为什么Neo4j知道只是醒来并开始?
这是我的Gemfile.lock:
GEM
remote: https://rubygems.org/
specs:
actionmailer (3.2.13)
actionpack (= 3.2.13)
mail (~> 2.5.3)
actionpack (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
activerecord (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
activesupport (3.2.13)
i18n (= 0.6.1)
multi_json (~> 1.0)
arel (3.0.2)
builder (3.0.4)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.6.2)
diff-lcs (1.2.4)
erubis (2.7.0)
execjs (1.4.0)
multi_json (~> 1.0)
hike (1.2.2)
i18n (0.6.1)
journey (1.0.4)
jquery-rails (2.2.1)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
json (1.7.7-java)
mail (2.5.3)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.23)
multi_json (1.7.2)
neo4j (2.2.3-java)
activemodel (>= 3.0.0, < 3.3)
neo4j-wrapper (= 2.2.3)
orm_adapter (>= 0.0.3)
railties (>= 3.0.0, < 3.3)
neo4j-community (1.8.1-java)
neo4j-core (2.2.3-java)
neo4j-community (>= 1.8.1, < 1.9)
neo4j-cypher (~> 1.0.0)
neo4j-cypher (1.0.0)
neo4j-wrapper (2.2.3-java)
neo4j-core (= 2.2.3)
orm_adapter (0.4.0)
polyglot (0.3.3)
puma (1.6.3-java)
rack (~> 1.2)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
rack-ssl (1.3.3)
rack
rack-test (0.6.2)
rack (>= 1.0)
rails (3.2.13)
actionmailer (= 3.2.13)
actionpack (= 3.2.13)
activerecord (= 3.2.13)
activeresource (= 3.2.13)
activesupport (= 3.2.13)
bundler (~> 1.0)
railties (= 3.2.13)
railties (3.2.13)
actionpack (= 3.2.13)
activesupport (= 3.2.13)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.0.4)
rdoc (3.12.2)
json (~> 1.4)
rspec-core (2.13.1)
rspec-expectations (2.13.0)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.13.1)
rspec-rails (2.13.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.13.0)
rspec-expectations (~> 2.13.0)
rspec-mocks (~> 2.13.0)
sass (3.2.8)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
therubyrhino (2.0.2)
therubyrhino_jar (>= 1.7.3)
therubyrhino_jar (1.7.4)
thor (0.18.1)
tilt (1.3.7)
treetop (1.4.12)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.37)
uglifier (2.0.1)
execjs (>= 0.3.0)
multi_json (~> 1.0, >= 1.0.2)
PLATFORMS
java
DEPENDENCIES
coffee-rails (~> 3.2.1)
jquery-rails
neo4j (>= 2.2.3)
puma
rails (= 3.2.13)
rspec-rails
sass-rails (~> 3.2.3)
therubyrhino
uglifier (>= 1.0.3)
答案 0 :(得分:3)
这很可能是因为Neo4j启动还不是线程安全的。 Neo4j实际上会在您第一次点击应用时启动。但是,根据请求的类型,您可能会遇到上述错误。具体来说,在Neo4j启动时对应用程序的多个请求将导致错误,直到应用程序重新启动。
我为此提交了一个修补程序(请参阅here,here和here)并且已合并。但是,它还没有被包含在官方宝石版本中。
如果您现在想要解决此问题,您有两种选择:
- 指向neo4核心主分支
- 使用以下猴子补丁在启动时自动启动Neo4j。这绕过线程安全问题,因为在Neo4j完成启动之前Rails不会接受任何请求。
#config/initializers/neo4j.rb
require 'neo4j'
module Neo4j
class Railtie < ::Rails::Railtie
initializer "neo4j.db.start", :after => "neo4j.start" do |app|
Neo4j.start if app.config.neo4j.auto_start
end
end
end
#config/application.rb
config.neo4j.auto_start = true
请注意,即使有了这些修复程序,我仍然遇到了美洲狮网络服务器抛出奇怪异常的问题。我建议torquebox-lite用于生产 - 它永远不会让我失望。
更新:Neo4j.rb v2.2.4(2013年5月19日发布)包含此修补程序,因此升级后将不再需要此修补程序。