Приложение 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, это не имело большого значения, так как подавляющее большинство кода уже существует в методах.