部署到heroku后,Neo4j不会自动启动

时间:2013-04-26 22:23:28

标签: heroku jruby neo4j

我正在尝试使用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)

1 个答案:

答案 0 :(得分:3)

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

我为此提交了一个修补程序(请参阅hereherehere)并且已合并。但是,它还没有被包含在官方宝石版本中。

如果您现在想要解决此问题,您有两种选择:

- 指向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日发布)包含此修补程序,因此升级后将不再需要此修补程序。