使用Cygwin和Ruby解析地址空间已经被占用错误

时间:2013-04-01 20:15:24

标签: ruby-on-rails windows cygwin

我不断收到相同类型的错误消息,我已经尽力摆脱它们。消息如下,只有模块可以随时变化:

ruby 5740 child_info_fork::abort: address space needed by 'date_core.so' (0x600000) is already occupied

尝试运行Rails时会出现这些消息,例如“rails console”。 我正在运行以下环境:

  • Windows 7旗舰版64位
  • Cygwin Net使用安装程序2.774(从Internet镜像安装)
  • Ruby 1.9.3p392
  • Rails 3.2.11

我已采取以下步骤尝试解决此问题:

  • 删除了所有BLODA并重新启动,包括Norton 360和Malwarebytes。 (BLODA是Dodgy Apps的大清单。)
  • 删除并重新安装了Cygwin。
  • 执行了“rvm implode”并重建了RVM和Ruby on Rails环境。
  • 二手CMD& ASH运行“peflagsall”& “rebaseall”。跑“rubyrebase”。重新启动。
  • 使用FIND构建所有* .so&的文件* .dll文件。跑“rebase -T”。重新启动。这也是使用“-b 0x77000000”开关完成的。
  • 使用相同的文件创建“to_peflags”脚本,针对每个单独的文件发出peflags。重新启动。

所有修复尝试都是徒劳的。有时,“rebase -si | grep'*'”会很干净。任何运行“rails console”或类似命令的尝试都会导致地址空间占用消息。随后“rebase -si”将再次显示冲突。 我一直试图对Ruby模块运行“peflags”,但我只是“跳过因为无法打开”错误消息。文件权限和ACL都显示正确的权限。无论是否使用管理员,都会发生同样的错误。

这非常令人沮丧。我想修复我目前的环境,但我正在考虑转移到MSYS或SFU,但我不知道其中任何一个都是不错的选择。我也在考虑使用原生UNIX,但是当我到达它时,我会跳下悬崖。

目前,有没有人为我解决此特定错误?谢谢......

1 个答案:

答案 0 :(得分:0)

我使用procexp监视“rails console”执行。 Bash正在调用cmd.exe来运行rails.bat文件。 Cmd.exe以ASLR模式运行。使用Microsoft EMET 3.0关闭bash和cmd的强制ASLR和自下而上的ASLR。 Cmd.exe仍以ASLR模式运行。它必须以这种方式编译。

更新注册表以将HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ MoveImages设置为0,-1然后1. 0导致系统问题。 -1没有效果。 1,这应该是默认的,只要EMET变更到位就有所帮助。但是,由于地址空间占用最终会再次发生,因此它是不可靠的。

决定尝试安装一个命令处理器,该命令处理器不需要ASLR或允许我使用PE标志禁用它。我安装了TCC / LE并尝试让Cygwin Bash使用它来处理.bat文件。我尝试使用路径变量,COMSPEC变量并更改为注册表中的batfile和cmdfile都无效。 Cygwin Bash必须要么硬编码,要么有一些非显而易见的控制。

我的解决方法是更换我的环境。我知道我最终将迁移到某些Unix,但是现在我转换为MinGW / MSYS和RubyStack。我想要做的就是为今天运行一个稳定的RoR(Ruby on Rails)环境。我没有看到使用Cygwin和Windows 7 Ultimate发生这种情况。我一直遇到太多问题,这个问题非常非常棘手。感谢...