【问题标题】:Sinatra exits without errorSinatra 无错误退出
【发布时间】:2014-12-02 20:31:53
【问题描述】:

我是 Sinatra 的新手,我正在尝试根据 this article 进行资产管理和编译工作。到目前为止,这是我的主要文件:

require 'sinatra/base'
require 'sinatra/assetpack'
require 'sass'

class App < Sinatra::Base
  register Sinatra::AssetPack
  assets do

    css :application, [
      '/css/main.scss'
    ]

    css_compression :sass

  end


  get '/hi' do
    erb "Hello World!"
  end
end

但是,由于某种原因,当我运行ruby main.rb 时,它只是退出而没有失败或任何事情。是否有一个特殊的关键字来让应用程序提供文件?

【问题讨论】:

  • 你设置了 config.ru 文件吗?

标签: ruby sinatra assets


【解决方案1】:

使用模块化样式的 Sinatra 应用程序,正如您所做的那样,运行 ruby main.rb 将退出而不会出错,因为它被视为标准 ruby​​ 应用程序,并且从未创建任何网络服务器。

你有两个选择。

1 在示例中的最后一个 end 语句之前添加 run! if app_file == $0。 这将允许您使用 ruby main.rb 运行应用程序

2(这是首选方法)使用以下内容创建一个机架文件config.ru

require './main.rb'
run App

现在您可以使用命令rackup -p 4567 为应用程序提供服务,其中4567 是您要使用的任何端口号。

【讨论】:

    【解决方案2】:

    你需要start the application

    require 'sinatra/base'
    require 'sinatra/assetpack'
    require 'sass'
    
    class App < Sinatra::Base
      register Sinatra::AssetPack
      assets do
    
        css :application, [
          '/css/main.scss'
        ]
    
        css_compression :sass
    
      end
    
    
      get '/hi' do
        erb "Hello World!"
      end
    
      run! if app_file == $0
    end
    

    【讨论】:

      【解决方案3】:

      一个观察,erb应该指向一个模板,例如:

      get '/hi' do
        erb :home
      end
      

      应该在 ../views/home.erb 中查找文件

      还假设您已经完成了gem install sinatra。在 sinatra 中开发时,我也会使用 rerun gem,gem install rerun 然后rerun ruby app.rb。 Rerun 将在您更改代码时重新加载您的项目,因此您在进行更改时不必重新启动应用程序。

      【讨论】:

      • 这与原帖有点偏离主题,但需要明确的是,传递给erbtemplate 可以是字符串,它不需要指向@987654327 @ 文件,正如您在此处指示的那样。
      猜你喜欢
      • 2015-06-07
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2011-10-05
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多