Tag: sinatra

Ruby Rack:启动和拆卸操作(Tokyo Cabinet连接)

我在Sinatra的Rack上构建了一个非常简单的REST服务。 它由3个Tokyo Cabinet / Table数据存储区支持,这些数据存储区具有需要打开和关闭的连接。 我有两个用直接Ruby编写的模型类,目前只是连接,获取或放置他们需要的东西,然后断开连接。 显然,这不会长期发挥作用。 我也有像Warden这样的Rack中间件依赖于这些模型类。 管理打开和关闭连接的最佳方法是什么? 据我所知,Rack不提供启动/关闭挂钩。 我想在env中插入一个提供TC / TT对象引用的中间件,但是我必须通过Sinatra将它传递给模型,这看起来效率也不高; 这只会是TC的每请求连接。 我认为每服务器实例生命周期将是更合适的生命周期。 谢谢!

我应该在这个网站应用程序中使用Rails或Ruby吗? 怎么样?

我对Web编程很新(或者实际上,它已经非常老了,因为我最后一次搞乱Web是HTML 1.1),但现在需要快速部署Web应用程序。 似乎每次我转身时,都会有新的首字母缩略词和技术需要学习(JSON,XMLRPC,GWT,Javascript,Rails等)。 这是我的应用必须做的事情: 给定用户名和密码,进行身份validation(很简单,一切都是这样,显然)。 允许用户上传大量数据以进行处理。 处理该数据。 允许用户下载其处理的数据。 我已经有了Java脚本和一个用于处理数据的数据库。 在一台机器上,我可以运行一系列命令行程序来处理传入的数据块并将结果放回到mysql数据库中。 那已经存在并且有效。 我想使用这些现有和经过测试的方法构建此任务的Web前端。 我现在倾向于这种方法: 有两台机器,一台数据库机器和一台Web服务器。 如果需要,该方法允许以后的可伸缩性,但也要求我不能假设我用来访问数据并操纵它的程序是本地存储的。 使用Ruby DRb应用程序创建服务器和客户端。 客户端会将数据传递给服务器,服务器又会调用这些应用程序。 使用其他一些Ruby接口与Web前端的DRb进行交互。 这是我的问题:看起来大多数用于Web的Ruby应用程序都会自动尝试构建某种本地数据库。 我发现的所有Rails教程都是从创建自己的数据库并与之交互开始的,这正是我不想做的事情。 Rails是适合我的技术,还是使用Ruby DRb? 我应该探索一些其他技术吗? 如果Rails或Ruby是正确的东西,我应该看什么? 我已经有了编程Ruby书,并且已经将它用于一些后端内容以及使基本的DRb工作。

使用Sinatra更改HTTP状态消息

我正在编写一个简单的Sinatra应用程序,并且如果用户发布了具有特定数据的请求,我想返回错误“453”(自定义错误代码)和消息CLIENT_ERROR,或类似的东西。 问题是:查看Sinatra文档并进行一些测试我找不到设置响应错误消息的方法,只有响应状态。 所以,如果设置了Sinatra的响应 get ‘/’ do response.status = 453 end 我得到错误代码: curl -v localhost:4567 * About to connect() to localhost port 4567 (#0) * Trying 127.0.0.1… connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:4567 > Accept: */* > < HTTP/1.1 453 < X-Frame-Options: sameorigin < X-XSS-Protection: […]

Ruby / Rack中的多部分响应

我希望我的服务器发送多部分响应(multipart / x-mixed-replace)。 我更喜欢使用Sinatra框架或通用Rack应用程序的某种解决方案,但ruby中的任何示例都会很好。 这是我在PHP中尝试做的事情的等价物: <?php header('Content-type: multipart/x-mixed-replace;boundary="rn9012"'); print "–rn9012\n"; print "Content-type: application/xml\n\n"; print "\n”; print “First Part\n”; print “–rn9012\n”; flush(); sleep(5); print “Content-type: application/xml\n\n”; print “\n”; print “Second Part\n”; print “–rn9012–\n”; ?>

从Heroku应用程序中访问当前git提交号

我知道slug编译器在创建一个heroku slug时会删除.git目录,但是有没有办法配置Heroku以便我可以从我的脚本中访问当前运行的git commit编号? 我希望能够在我的sinatra应用程序(在Heroku中运行)上有一个小链接,其中显示“运行版本e72fb274a0 ”(或类似的东西)。 如何检索这个,或强制slug编译器将其添加到环境变量? 进展: 我认为最好的方法是在删除.git目录之前创建一个自定义buildpack,它将git commit版本号写入heroku slug。 我试过这样做(看看我的ruby buildpack的分支 )但是我添加的行 – 第23行 – 似乎没有完成这项工作。 Heroku看到并使用新的buildpack,但似乎没有将文件写入slug。 任何人都知道为什么我的自定义buildpack没有按预期工作? 谢谢, J.P

如何在Ruby 1.9.1中将Net :: HTTP响应转换为某种编码?

我有一个Sinatra应用程序( http://analyzethis.espace-technologies.com )执行以下操作 检索HTML页面(通过net / http) 从response.body创建一个Nokogiri文档 提取一些信息并将其发送回响应中。 响应应该是UTF-8编码 所以我在尝试阅读使用windows-1256编码的网站时遇到了这个问题,例如www.filfan.com或www.masrawy.com。 问题是虽然没有抛出错误,但编码转换的结果不正确。 net / http response.body.encoding给出ASCII-8BIT,它不能转换为UTF-8 如果我做Nokogiri :: HTML(response.body)并使用css选择器从页面获取某些内容 – 例如标题标签的内容 – 我得到一个字符串,当我调用string.encoding返回WINDOWS-1256 。 我使用string.encode(“utf-8”)并使用它发送响应,但同样响应不正确。 关于我的方法有什么问题的任何建议或想法?

开发没有Mac的iPhone应用程序?

可能重复: 如何使用Windows开发机器为iPhone开发? 我正在为我妻子的手机构建一个iPhone应用程序,但我不想购买Mac作为一次性工作的开发平台。 该应用程序: 应该在iPhone上独立运行(即没有网络连接) 使用其中一个iPhone Javascript库创建的GUI是完全可以接受的 将执行一些数据库IO来读取和更新数据 没有商业价值,任何人都不会使用 这是我的想法: 越狱iPhone 在iPhone上安装Ruby + Sinatra 使用Sinatra编写应用程序,在iPhone上访问数据库(SQLite?) 要访问iPhone上的应用程序: 在后台启动Sinatra应用程序(这可能吗?) 启动Safari浏览器会话 导航到Sinatra应用程序,例如http:// localhost:12345 等等 这似乎是一种奇怪的方法,但我想不出一种更简单的方法来编写独立的iPhone应用程序而无需购买Mac。 有更好的方法吗?

无法加载此类文件 – rack / handler / puma

我的设置和错误 当我用机架和美洲狮开始我的Sinatra应用程序时出错。 我的config.ru文件如下所示: #\ -s puma require ‘./controller/main.rb’ run Sinatra::Application 所以,当我现在使用rackup时,我收到此错误: /home/username/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/handler.rb:76:in“require”:无法加载此类文件 – 机架/处理程序/ puma(LoadError) 我用ruby 1.9.3p392(2013-02-22修订版39386)[i686-linux] 到目前为止我尝试了什么 我的第一个想法是我忘了安装美洲狮,或者美洲狮在某种程度上被打破了。 所以我尝试过: puma -v puma version 2.0.1 我直接用ruby开始它: ruby controller/main.rb Puma 2.0.1 starting… * Min threads: 0, max threads: 16 * Environment: development * Listening on tcp://localhost:4567 我发现了这个美洲狮问题,但我找不到真正的解决方案。 最后我的问题 为什么要发生这种情况? 我怎样才能解决这个问题?

从TestCase调用Sinatra应用程序实例方法

我在Sinatra应用程序中有一个util方法,我想从我的TestCase进行测试。 问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method ‘util_method’ for # my_app.rb: class MyApp < Sinatra::Base # […] routes methods # utils methods def util_method return "hi" end end my_app_test.rb: require “my_app.rb” require “test/unit” require “rack/test” class MyAppTest < Test::Unit::TestCase include Rack::Test::Methods def app MyApp.new end # […] routes methods tests def test_util_method assert_equal( "hi", app.util_method […]

在rspec中指定内容类型

我正在尝试构建一个通过POST发送JSON(或XML)的rspec测试。 但是,我似乎无法让它真正起作用: json = {…. data ….}.to_json post ‘/model1.json’,json,{‘CONTENT_TYPE’=>’application/json’} 还有这个 json = {…. data ….}.to_json post ‘/model1.json’,json,{‘Content-Type’=>’application/json’} 有任何想法吗? 谢谢!