Sinatra: запускать код рубина при нажатии на URL - PullRequest
5 голосов
/ 17 января 2011

Я хочу запускать скрипт (code.rb) каждый раз, когда нажимается URL / код.

Как запустить скрипт?

require 'sinatra'
get '/' do
  #run the script
end

Ответы [ 2 ]

8 голосов
/ 17 января 2011

Либо раскошелиться на другой процесс:

system('ruby code.rb')

... или просто load скрипт в текущем контексте:

load 'code.rb' # *not* require
6 голосов
/ 17 января 2011

Вам нужно load код, чтобы гарантировать, что он запускается каждый раз; require будет загружать код только один раз при первом запросе, а затем не снова:

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

Вывод hi предшествует записи запроса в журнале; Вы можете видеть, что запросы 'require' выводят только hi в первый раз, тогда как запросы 'load' показывают hi каждый раз. Вот выходные данные сервера, где true указывает на то, что код в файле был фактически выполнен, а false показывает, что это не так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...