Sinatra应用程序在加载期间执行,而不是在发布后运行方法

时间:2016-06-13 18:46:17

标签: ruby sinatra rack thin

这是我正在构建的真实应用程序的精简示例。当我执行我的应用程序时,这是我得到的结果。您会注意到它在启动之前表示它正在运行。您还会注意到它在发布开始后从未说过运行。

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!

我设置$ start只是为了尝试解决这个问题,但它没有帮助。我的应用程序在设置之前执行。我可以控制但是,这就是问题,在发布运行后它不会执行。

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

最后,如果没有别的,一旦它说&#34;启动Sapp :: App&#34;,它也应该说&#34; Sapp :: App已经启动。&#34;和#34; Sapp :: App正在运行。&#34;

对于记录,这两个选项都做同样的事情:

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

1 个答案:

答案 0 :(得分:1)

好的,我明白了。我把代码放在一个类中,但不是一个方法。加载或要求两者都运行这样的开放代码。我需要将它包装在方法中,并执行方法,以执行我想要做的事情。

我遵循的Sinatra示例并未明确说明这一主题。许多都是如此简单,它没有什么区别,有些只是在config.ru中编码。我来自Rails,虽然我从Rails知道这一点,但由于绝大多数代码已经存在于方法中,因此它并没有太大的区别。