Приложение Sinatra выполняется во время загрузки, а не после запуска метода

Это урезанный пример реального приложения, которое я создаю. Когда я запускаю свое приложение, это результат, который я получаю. Вы заметите, что он говорит, что работает до того, как запустится. Вы также заметите, что он никогда не говорит, что работает после запуска.

bundle exec rackup
Using thin;
Sapp::App running.
Starting Sapp::App
== Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from Thin
Thin web server (v1.7.0 codename Dunder Mifflin)
Maximum connections set to 1024
Listening on localhost:4567, CTRL+C to stop

Мой config.ru это:

# http://www.rubydoc.info/gems/webmachine/Webmachine/Adapters/Rack
$started = false
require 'thin'
require 'sinatra'
set :server, (ENV['RACK_ENV'] == 'production' || ENV['RACK_ENV'] == 'staging' ? 'rack' : 'thin')
puts "Using #{settings.server};"
load 'webmachine/adapters/rack.rb'
load File.join(File.dirname(__FILE__), 'sapp.rb')
$started = true
puts 'Starting Sapp::App'
#Sapp::App.run!
Sinatra::Application.run!

Я устанавливаю $ начал только для того, чтобы попытаться решить эту проблему, но это не помогает. Мое приложение выполняется до его установки. Я мог бы контролировать это, но, и это проблема, он не выполняется после запуска цикла.

sapp.rb это:

ENV['RACK_ENV'] ||= 'development'
Bundler.setup
$: << File.expand_path('../', __FILE__)
$: << File.expand_path('../lib', __FILE__)
require 'dotenv'
Dotenv.load(
    File.expand_path("../.env.#{ENV['RACK_ENV']}", __FILE__),
    File.expand_path("../.env", __FILE__))
module Sapp
  class App < Sinatra::Application
    puts 'Sapp::App has been started.' if $started
    puts 'Sapp::App running.'

  end
end

В конце концов, если ничего другого, то после того, как он говорит "Запуск Sapp::App", он также должен сказать "Sapp::App запущен". и "Sapp::App работает."

Для записи, оба эти варианта делают одно и то же:

Sapp::App.run!
Sinatra::Application.run!

1 ответ

Решение

Хорошо, я понял. Я ставлю код в класс, но не это метод. Загрузите или потребуйте оба запуска открытого кода, как это. Мне нужно обернуть это в методы и выполнить методы, чтобы делать то, что я хочу делать.

Примеры Синатры, которым я следовал, не проясняют это и просто избегают темы. Многие настолько просты, что это не имеет значения, а некоторые просто кодируются в config.ru. Я из Rails, и хотя я знал об этом из Rails, это не имело большого значения, так как подавляющее большинство кода уже существует в методах.

Другие вопросы по тегам