Sin*_*bar 10 ruby web-applications
我想在Ruby中构建一个Web应用程序,但我不知道是否可以在不使用框架的情况下这样做.我不知道为什么大多数Ruby开发人员使用像Rails或Sinatra这样的框架.
如何设置不基于现有框架的Ruby Web应用程序?
Sho*_*hoe 82
是否可以在不使用框架的情况下在ruby中创建Web应用程序?
太长; 没看过
是的,这绝对是可能的.大多数Ruby框架都是在其他中间件库(如Web服务器接口)之上使用纯Ruby构建的.
Ruby和Web
Ruby是一种通用语言; 因此它不是专门为Web开发而设计的.例如,PHP是一种用于创建Web应用程序的语言.在Ruby中,您将需要一些库来正确处理HTTP头和Web特定元素.
例如,在Python中,(另一种通用编程语言)我们有一个名为WSGI(Web服务器网关接口)的标准Web服务器接口规范.实现WSGI规范的每个服务器都称为WSGI兼容.任何兼容WSGI的服务器都可以以相同的方式运行相同的WSGI Python脚本.
在谈到Ruby时我为什么要告诉你这个?因为Ruby有一个非常类似的概念WSGI,可能的例外,它是不是还没有一个标准.它的名字是Rack,它提供了一个接口,用于处理您不想自己处理的常见低级HTTP/Server内容,以便我们可以像使用PHP一样使用Ruby .
Ruby,Rack和Apache
让我们来看一个真实的例子:Apache.Apache是最常见的Web服务器之一.PHP如何与Apache一起工作?随着mod_php.Python WSGI兼容的应用程序如何与Apache一起使用?随着mod_wsgi.Ruby Rack兼容的应用程序如何与Apache协同工作?随着mod_rack.你能看到这里的模式吗?Web服务器需要知道如何将您的应用程序正确链接到请求/响应Web上下文.
机架示例
在这个抽象的演讲中没有进一步处理,让我们关注一个例子:
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
Run Code Online (Sandbox Code Playgroud)
这个例子由Rack网站提供,它解释了Rack兼容脚本的运行方式:
rack在您的Web服务器上(您将在Web服务器上找到大量关于Google的教程)config.ru在根文件夹文件(.ru是大部分红宝石)run方法运行它Etvoilà,我们有一个Web服务器界面.的env哈希值包含从当前请求和要返回的数组中的环境变量包含3个组分:
例如,在PHP中,所有这些都是自动完成的.当您执行echo "Hello";响应状态时,PHP解释器会为您生成标头.
关于替代品的说明
你可以在这个领域挖掘你想要的所有东西,但是下面列出的大多数技术要么被弃用,要么被社区高度劝阻.
在Web的最初几年,有一个通用接口用于在服务器端运行Perl,Python,Ruby,C scrips:CGI或Common Gateway Interface.这是一个几乎可以被任何编程语言使用的接口,但它通常被认为很慢.
有些人认为通过加快速度来恢复这个界面.从中可以猜出,FCGI或FastCGI 出现了什么.这种技术的使用频率比您想象的要高.有些PHP脚本有时会转换为FCGI脚本,以使它们运行得更快.我不想进一步讨论这个话题,因为还有很多其他的参考资料.
最后,您可以创建自己的Web服务器.实际上,您不必使用Ruby创建Web服务器以使用Ruby.从理论上讲,Web服务器就像:
在现实生活环境中,您不希望自己为生产网站实现Web服务器.所以我绝对不鼓励这样做.
如果是,为什么大多数红宝石Web开发人员选择框架?
专业人士
框架旨在快速开发您的开发.如果你有最后期限,你不想处理低级别的东西,你会喜欢一个framework build -blog能为你管理尽可能多的无聊事物的命令,让你专注于真正的应用程序设计.
框架通常是开源的,并且具有大型社区,这有助于更快地构建框架.您可以很容易地理解,发现10,000个眼睛看到的代码中的错误比您自己编写的代码快10.000倍.
缺点
有些框架可能对您的需求而言太大,而其他框架可能太小.在Ruby环境中,有巨大的Rails及其小兄弟Sinatra.一个是巨大的,另一个是非常小的,真的很不合适.有时你想要介于两者之间.
框架通常非常通用.这意味着您必须配置对您的上下文而言显而易见的事物.
框架包含的代码多于您需要的代码.这是一个事实,你可以自己推断.这通常意味着更多的复杂性和更多的错误(即使这是由他们周围的庞大社区补偿).
| 归档时间: |
|
| 查看次数: |
9218 次 |
| 最近记录: |