0

我正在尝试使用 neo4j gem 将 jruby rails 应用程序部署到 Heroku。在本地运行可以正常运行,但是当我在 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)
4

1 回答 1

3

这很可能是因为 Neo4j 启动不是(还)线程安全的。Neo4j 实际上会在您第一次点击您的应用程序时启动。但是,根据请求的类型,您可能会遇到上述错误。具体来说,在 Neo4j 启动时对应用程序的多个请求将导致错误,直到应用程序重新启动。

我为此提交了一个修复程序(请参见此处此处此处)并且它已被合并。但是,它尚未包含在官方 gem 版本中。

如果您想暂时解决此问题,您有两种选择:

-指向neo4-core master分支

- 使用以下猴子补丁在启动时自动启动 Neo4j。这绕过了线程安全问题,因为 Rails 在 Neo4j 完成启动之前不会接受任何请求。

#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

请注意,即使有了这些修复,我仍然遇到 puma Web 服务器抛出奇怪异常的问题。我建议将扭矩箱精简版用于生产用途 - 它对我来说从未失败过。

更新:Neo4j.rb v2.2.4(2013 年 5 月 19 日发布)包含此修复,因此升级后将不再需要此补丁。

于 2013-04-26T23:24:37.257 回答