You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行rake neo4j:install触发rb_sysopen无文件或目录错误

问题描述
  • 参考Neo4jrb v10.0.1官方配置指南搭建新项目时,曾尝试执行以下命令设置环境变量,但该操作未解决安装异常:
export NEO4J_DIST=http://dist.neo4j.org/neo4j-community-4.4.8-unix.tar.gz
  • 执行带--trace参数的安装命令rake neo4j:install[community-4.4.8,development]时,rake任务中止,抛出错误:
Errno::ENOENT: No such file or directory @ rb_sysopen - https://dist.neo4j.org/neo4j-community-4.4.8-unix.tar.gz
  • 完整执行追踪日志如下:
$ rake neo4j:install[community-4.4.8,development] --trace
DEPRECATION WARNING: ActiveSupport::PerThreadRegistry is deprecated and will be removed in Rails 7.1.
Use `Module#thread_mattr_accessor` instead.
 (called from <top (required)> at /home/aray/code/ruby/myapp/config/application.rb:17)
DEPRECATION WARNING: ActiveSupport::PerThreadRegistry is deprecated and will be removed in Rails 7.1.
Use `Module#thread_mattr_accessor` instead.
 (called from <top (required)> at /home/aray/code/ruby/myapp/config/application.rb:22)
** Invoke neo4j:install (first_time)
** Execute neo4j:install
Install Neo4j (development environment)...

rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - https://dist.neo4j.org/neo4j-community-4.4.8-unix.tar.gz
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/download.rb:18:in `initialize'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/download.rb:18:in `open'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/download.rb:18:in `fetch'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/server_manager.rb:303:in `download_neo4j'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/server_manager.rb:19:in `install'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/neo4j-rake_tasks-0.7.19/lib/neo4j/rake_tasks/neo4j_server.rake:39:in `block (2 levels) in <main>'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:279:in `block in execute'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:279:in `each'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:279:in `execute'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/home/aray/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/home/aray/.rbenv/versions/3.0.3/bin/rake:25:in `load'
/home/aray/.rbenv/versions/3.0.3/bin/rake:25:in `<main>'
Tasks: TOP => neo4j:install
报错原因
  • 核心问题是当前使用的neo4j-rake_tasks 0.7.19版本存在代码缺陷:下载逻辑直接调用Kernel.open方法读取传入的地址,但没有引入open-uri标准库。原生Kernel.open只支持读取本地文件路径,遇到HTTP/HTTPS格式的URL时会直接把字符串当本地文件路径查找,找不到对应文件就抛出Errno::ENOENT错误。
  • 手动设置NEO4J_DIST环境变量不生效,是因为该版本的rake任务逻辑里,命令参数传入的版本号会自动拼接官方下载域名生成地址,优先级高于手动设置的环境变量,导致自定义的下载地址没有被读取。
  • 日志里的两条ActiveSupport弃用警告和本次安装失败无关,是Rails 7.1版本对旧API的移除提示,不影响安装流程执行。
解决方法

按优先级从高到低选择以下方案即可:

  • 升级neo4j-rake_tasks版本
    直接把Gemfile里的neo4j相关依赖升级到最新稳定版,0.7.20及以上版本已经修复了远程下载的依赖缺失问题,同时修正了环境变量读取优先级的bug,升级后直接重新执行安装命令即可:
bundle update neo4j-rake_tasks
rake neo4j:install[community-4.4.8,development]
  • 补全依赖+本地安装包安装
    如果暂时不能升级gem版本,先在Gemfile中添加open-uri依赖解决远程读取问题,执行bundle install后再运行安装命令。如果网络访问Neo4j官方下载源不稳定,可以提前把对应版本的安装包下载到本地目录,将NEO4J_DIST指向本地文件路径再执行安装:
# 假设安装包存放在项目tmp目录下
export NEO4J_DIST=./tmp/neo4j-community-4.4.8-unix.tar.gz
rake neo4j:install[community-4.4.8,development]

内容的提问来源于stack exchange,提问作者cloud_master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:39:20