我遇到了使用Nokogiri's gem
和解析复杂页面(SystemStackError: stack level too deep
)耗尽堆栈内存的问题。
我在这里发现了几个线程,这些线程说我需要更改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初始化来说为时已晚。
因此,您必须正确设置变量,以便在启动Ruby可执行文件之前可以使用它们。
在Windows上,环境变量存储在注册表中。您可以从控制面板或命令行中更改它们,如下所示:
# 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选择新的设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句