我遇到了使用 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/