无法 运行 ruby 由 neo4j 支持的 rails 应用的规范测试

Unable to run ruby spec tests of rails app backed by neo4j

我最近继承了一个由 neo4j 而不是 postgres 支持的 rails 应用程序。

当我尝试 运行 这样的规范测试时

NEO4J_TYPE=bolt NEO4J_URL="bolt://localhost" bundle exec rake spec

我明白了

/Users/user1/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:66:in `create_request': undefined method `request_uri' for #<URI::Generic bolt://localhost> (NoMethodError)

我也试过了

NEO4J_TYPE=bolt NEO4J_URL="bolt://localhost:7687" bundle exec rake spec

我读了http://neo4jrb.readthedocs.io/en/7.1.x/Setup.htmlhttp://neo4jrb.readthedocs.io/en/9.0.x/Testing.html

但还没有找到解决办法。

我做过的一些事情:

brew install neo4j. # also installed java 8 with brew
rake neo4j:config[test,7575]
brew services stop neo4j
brew services start neo4j

$ cypher-shell -a bolt://localhost
Connected to Neo4j 3.3.0 at bolt://localhost:7687.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j> 
Interrupted (Note that Cypher queries must end with a semicolon. Type :exit to exit the shell.)
neo4j> 

这与您定义 URL 的方式有关。您正在使用 bolt 方案,因此 URI 不知道它是什么类型的 URI,因此确实提供了一个通用 URI 实例。

bolt_uri = URI.parse("bolt://localhost") #=> #<URI::Generic bolt://localhost>
bolt_uri.request_uri #=> Raises NoMethodError

http_uri = URI.parse("http://localhost") #=> #<URI::HTTP http://localhost>
http_uri.request_uri #=> "/"

本质上,因为接口是通过 HTTP 传递给法拉第(HTTP 客户端),所以 URL 应该定义为 NEO4J_URL="http://localhost"

关于 Daniel 的回答,gem 应该允许 bolt:// 作为 URL(请参阅 joshsverns 链接到的 Setup 文档)。架构在此处计算得出:

https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/railtie.rb#L98

在上面的行中,它调用 scheme 从 URL 中获取 bolt。此外,您可以从那里看到,当指定 NEO4J_URL 时,忽略了 NEO4J_TYPE 环境变量。

综上所述,joshsverns 出现的错误看起来确实像是在尝试使用 Faraday,它应该只用于 HTTP 适配器。我需要更多的回溯来理解正在采取的路径。

尽管 bolt 实现并不像我希望的那样成熟。我通常一直建议人们现在使用 HTTP(尽管我总是很高兴有人测试 bolt)。

此外,小提示:您从 URL 链接到 http://neo4jrb.readthedocs.io/en/7.1.x/Setup.html,这是 7.1.x 的文档,它不是 gem 的最新版本(虽然我不确定你使用的是什么版本)