

Ruby初心者です。RubyでWebrickサーバーを走らせつつ[server.rb]、別ファイル[test.rb]からサーバーで代入している変数を参照したいのですが、別ファイルから変数を参照するたびにサーバーが開いてしまい、変数を参照できません。

グローバル変数やインスタンス変数、定数を使用しても結果は変わりませんでした。  
[test.rb]でrequireの代わりにloadやeval
File.readを使う方法も試しましたが、やはりサーバーが開いてしまい,サーバーを止めるまで結果が出力されません。サーバーは常に開いておく必要があるので、一定期間ごとに止める方法は使えません。

サーバーに限らず、ループ処理の特定タイミングでその瞬間の状態の変数を取得する場合も同じことが起こると思うのですが、そもそもこのような処理はできないのでしょうか。教えていただけると非常に助かります。

[server.rb]

[code]

    require 'webrick'
    require "json"
    
    s = WEBrick::HTTPServer.new({
      Port:           8000,
    })
    
    post = Array.new(0)
    
    s.mount_proc('/') do |req, res|
    
      post.push(req.body) #req.bodyはハッシュです
    
    end
    
    Signal.trap('INT'){s.shutdown}
    s.start
    
[/code]

[test.rb]

[code]

    require './server.rb'
    puts post
    
[/code]


CC BY-SA 3.0
2017-10-19T22:44:50.670
38885
2019-12-19T11:01:40.233
2017-10-19T22:50:46.240
25475
25475
question
ruby
Rubyで起動中のWebrickサーバから変数を取得する方法


何を参考にされたのかわからないのですが、サーバ側もクライアント側もほぼ全面的におかしいです。特にクライアント側は実質サーバのコードを`require`しているだけで、クライアント側に必要なコードが全くありません。

「クライアントがサーバのデータを取得する」というだけなら単純に書けばこうなります。

[code]

    #サーバ側
    s.mount_proc('/') do |req, res|
      res.body = JSON.generate(post)
    end
    
    #クライアント側
    require 'open-uri'
    
    p JSON.parse(open('http://server:8080').read)
    
[/code]


CC BY-SA 3.0
2017-10-21T02:15:04.370
38920
2017-10-21T02:15:04.370
5793
38885
answer