2011-01-17 15 views

Odpowiedz

8

Albo widelec się inny proces:

system('ruby code.rb')

... lub po prostu load skrypt do bieżącego kontekstu:

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

Zważywszy, że twój jest akceptowane odpowiedź, czy mogę zasugerować, że należy go zaktualizować do zaproponuj 'load' zamiast' require', za moją odpowiedź? – Phrogz

+0

Ma rację, wiesz. – tekknolagi

+0

Dobra uwaga! Wymiana pieniędzy. –

6

musisz load kod, aby upewnić się, że jest uruchamiany za każdym razem; require będzie ładować tylko kod raz na pierwsze żądanie, a następnie nie ponownie:

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 

Wyjście hi przychodzi przed wejściem żądanie w dzienniku; możesz zobaczyć, że żądania "wymagaj" wyświetlają się za pierwszym razem tylko hi, a żądania do "ładowania" pokazują za każdym razem hi. Tutaj jest wyjście z serwera, gdzie true wskazuje, że kod w pliku faktycznie uruchomić i false pokazuje, że nie było:

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 
Powiązane problemy