2011-01-17 3 views

答えて

8

いずれのフォーク別のプロセス:

load 'code.rb' # *not* require
+4

あなたが受け入れ答えであることを考えると、私はあなたがそれを更新する必要があることを示唆するかもしれない:ここでtrueは、ファイル内のコードが実際に実行されたとfalseはそれがなかったことを示していることを示し、サーバーの出力は、です私の答えごとに 'require'の代わりに' load'を提案しますか? – Phrogz

+0

彼はそうです。 – tekknolagi

+0

良い点!変化。 –

6

あなたはそれことを保証するためにloadコードする必要があります。現在のコンテキストに

system('ruby code.rb')

...または単にloadスクリプト毎回実行されます。 hiの出力がログに要求エントリの前に来る

smagic:Desktop phrogz$ cat hi.rb 
    puts "hi" 

smagic:Desktop phrogz$ cat test.rb 
    require 'sinatra' 
    get '/require' do 
    x = require_relative('hi.rb') 
    "require sez #{x}" 
    end 

    get '/load' do 
    x = load('hi.rb') 
    "load sez #{x}" 
    end 

smagic:Desktop phrogz$ ruby test.rb 
    == Sinatra/1.1.2 has taken the stage on 4567 for development with backup from Thin 
    >> Thin web server (v1.2.7 codename No Hup) 
    >> Maximum connections set to 1024 
    >> Listening on 0.0.0.0:4567, CTRL+C to stop 
    hi 
    127.0.0.1 - - [16/Jan/2011 20:49:43] "GET /require HTTP/1.1" 200 16 0.0019 
    127.0.0.1 - - [16/Jan/2011 20:49:46] "GET /require HTTP/1.1" 200 17 0.0005 
    hi 
    127.0.0.1 - - [16/Jan/2011 20:49:52] "GET /load HTTP/1.1" 200 13 0.0009 
    hi 
    127.0.0.1 - - [16/Jan/2011 20:49:54] "GET /load HTTP/1.1" 200 13 0.0008 
    127.0.0.1 - - [16/Jan/2011 20:50:09] "GET /require HTTP/1.1" 200 17 0.0005 
    127.0.0.1 - - [16/Jan/2011 20:50:12] "GET /require HTTP/1.1" 200 17 0.0005 

;:requireは最初のリクエストに応じて、一度コードをロードした後、再びないだろう「要求する」という要求は最初にhiの出力のみであり、「ロードする」要求は毎回hiと表示されます。

smagic:~ phrogz$ curl http://localhost:4567/require 
require sez true 

smagic:~ phrogz$ curl http://localhost:4567/require 
require sez false 

smagic:~ phrogz$ curl http://localhost:4567/load 
load sez true 

smagic:~ phrogz$ curl http://localhost:4567/load 
load sez true 

smagic:~ phrogz$ curl http://localhost:4567/require 
require sez false 

smagic:~ phrogz$ curl http://localhost:4567/require 
require sez false 
関連する問題