2017-05-26 1 views
2

Nokogiri's gemを使用してスタックメモリがなくなり、複雑なページ(SystemStackError: stack level too deep)を解析する問題が発生しました。Windows上でRuby-on-Rails仮想マシン 'スタックサイズ'を変更するには?

Ruby VMのスタックサイズを変更する必要があると言われているスレッドがいくつか見つかりましたが、Windows 10のラップトップを使用しているため、動作させることができないようです。私はルビーのコンソールを開き、変数の値を要求すると

私が取得:これを入力するとき

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}  
を得ますか

RUBY_THREAD_VM_STACK_SIZE = 50000000 
THREAD_VM_STACK_SIZE = 50000000 

私は.envファイルにdotenv gemをインストールし、設定した変数にアウトしようと試み

ENV変数として私のirb>に表示されるようになりましたが、RubyVM::DEFAULT_PARAMSは変更されていません。

私のアプリケーションのVMスタックサイズをどのように変更できますか?どうもありがとう!!

答えて

1

dotenv gemを使用できない理由は、これらの変数がRubyのVM初期化時に読み込み可能でなければならないということです。 dotenvでそれらを設定するのは、VM initにとって遅すぎます。

したがって、変数を適切に設定する必要があります。これらの変数は、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が拾っておく必要がありますので、同様にあなたはfrom the control panel、またはコマンドラインのいずれかからそれらを変更することができます新しい設定。

+0

ありがとうキャスパー、それは働いた!何らかの理由で、私はまだ同じエラーメッセージを受け取ります。私は50 MBのスタックメモリに同じ問題をプッシュしました..マシンスタックサイズがVMスタックサイズを制限している可能性がありますので、変更する必要がありますか?私はしようとしましたが、 'set'コマンドでは動作しないようです。 – Felix

+0

はい、システムのスタックサイズが制限要因である可能性があります。私はNokogiriに問題を提出し、あなたがそこで助けを得ることができるかどうかを見ます。あまりにもバグかもしれません。 – Casper

関連する問題