ruby-on-rails - 如何在 Windows 上更改 Ruby-on-Rails 虚拟机 'stack size'?

标签 ruby-on-rails ruby windows

我遇到了使用 Nokogiri 的 gem 和解析复杂页面时堆栈内存不足的问题(SystemStackError:堆栈级别太深)。

我在这里发现了几个线程,它们说我需要更改 Rubys VM 的堆栈大小,但由于我在 Windows 10 笔记本电脑上,我似乎无法让它工作。

当我打开 ruby​​ 控制台并请求我得到的变量值时:

irb> ENV['RUBY_THREAD_VM_STACK_SIZE'] 
=> nil

输入时,我确实得到了堆栈大小的值(名称略有不同)

irb> RubyVM::DEFAULT_PARAMS
=> {:thread_vm_stack_size=>1048576, :thread_machine_stack_size=>1048576, :fiber_vm_stack_size=>131072, :fiber_machine_stack_size=>524288}    

我尝试安装 dotenv gem 并在 .env 文件中设置变量:

RUBY_THREAD_VM_STACK_SIZE = 50000000
THREAD_VM_STACK_SIZE = 50000000

我现在可以在我的 irb> 中看到它们作为 ENV 变量,但是 RubyVM::DEFAULT_PARAMS 没有改变。

关于如何更改我的应用程序的 VM 堆栈大小的任何想法?非常感谢!!

最佳答案

您不能使用 dotenv gem 的原因是这些变量必须在 VM 初始化时由 Ruby 读取。通过 dotenv 设置它们对于 VM init 来说太晚了。

因此您必须正确设置变量,以便它们在 Ruby 可执行文件启动之前可用。

在 Windows 上,环境变量存储在注册表中。您可以更改它们 from the control panel ,或从命令行像这样:

# Set temporary variable for this command prompt
set RUBY_THREAD_VM_STACK_SIZE=1234567

# Set permanent user-level variable in the registry
setx RUBY_THREAD_VM_STACK_SIZE 1234567

如果您使用了 setx,您必须在使用后打开一个新的命令提示符,现在您应该让 Ruby 选择新的设置。

关于ruby-on-rails - 如何在 Windows 上更改 Ruby-on-Rails 虚拟机 'stack size'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205525/

相关文章:

ruby - Process.spawn挂起

ruby-on-rails - 发送 1 个附件,收件人报告 2 个附件(已添加 ATT0001.c) - Rails 3、ActionMailer

ruby-on-rails - 回形针和 ActiveRecord : search for objects with attached files

ruby-on-rails - postgres LISTEN/NOTIFY rails

ruby - 使用 RVM 在将部署在 Heroku 上的 Rails 应用程序中指定 Ruby 版本的正确方法是什么?

ruby - 我应该使用 Ruby 框架吗?

Java 弹出菜单和顶部 float 框

windows - 未解析的外部符号 _png_init_io 在函数 _pixReadStreamPng 中引用

c# - .Net 内存增长问题

ruby-on-rails - 注册时出现Devise Gem错误