【问题标题】:hello world sinatra app error你好世界 sinatra 应用程序错误
【发布时间】:2014-12-12 01:57:26
【问题描述】:

我在学习如何使用 Sinatra 时遇到了麻烦。我终于安装了 phusion-passenger 并在 Ubuntu 上使用我的 apache2。我有以下目录和文件

/var/www/html
/var/www/html/public
/var/www/html/tmp
/var/www/html/config.ru   # this is a file

/var/www/html/config.ru的内容是从https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#_tutorial_example_writing_and_deploying_a_hello_world_rack_application复制而来的。

当我启动这个应用程序时,我得到了 hello world,这很棒。

接下来,我想构建一个 Sinatra 应用程序。我继续创建文件

/var/www/html/myapp.rb

包含http://www.sinatrarb.com/intro.html 描述的内容。我还做了一个gem install sinatra。我重新启动了apache。然后我去了http://localhost/,但我仍然看到我的config.ru 中的hello world。于是我用myapp.rb 覆盖了config.ru 的内容。我重新启动了apache。但现在我收到一条错误消息

missing run or map statement (RuntimeError)
  /usr/lib/ruby/vendor_ruby/rack/builder.rb:133:in `to_app'
  config.ru:1:in `<main>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

我做错了什么?如何构建 hello world Sinatra 应用程序?

【问题讨论】:

  • 我建议先在单机模式下学习和测试 Sinatra。一旦您对这种方式感到满意,然后将其连接到Passenger。最初尝试使用Passenger只会混淆您需要理解的内容,并且更难以弄清楚堆栈中的哪些内容。就其本身而言,Sinatra 非常易于使用,并且不需要任何其他东西来处理 HTTP 请求。它是一个功能强大的小型网络服务器 DSL,尤其是与 Haml 和 Thin 搭配使用时。 Sinatra 的主页展示了如何创建一个“hello world”应用程序,实际上只需要三行代码即可。

标签: ruby sinatra


【解决方案1】:

您的config.ru 应该要求并运行您的应用,例如:

require './myapp.rb' 
run Sinatra::Application

反过来,myapp 应该需要 sinatra:

require 'sinatra'

get '/' do
  'Hello world!'
end

继续阅读有关使用 config.ru 的信息:http://www.sinatrarb.com/intro.html#Using%20a%20Classic%20Style%20Application%20with%20a%20config.ru

【讨论】:

  • 谢谢你...熬过 ruby​​ 的初步学习是如此痛苦
  • 不要将 Ruby 与 Sinatra 的 DSL、Apache 和Passenger 混淆。所有人都有自己的学习曲线,并且试图一次完成所有这些将非常令人困惑。学习 Ruby,然后在 Sinatra 中折腾,然后添加其他的。这会更有意义。
  • 谢谢铁皮人。我现在开始明白,我确实把所有这些技术混为一谈了……我的印象主要是每一种技术都相互依赖才能工作。我正在慢慢地了解到情况并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多