Tag: sinatra

在模块化Sinatra应用程序中访问irb

我正在构建一个像Sinatra这样的子类的应用程序: require ‘rubygems’ require ‘sinatra/base’ require ‘sinatra/assetpack’ class App < Sinatra::Base … run! end 我怎样才能访问irb? 以这种方式执行sinatra时不解析选项,如何以编程方式打开irb shell?

Sinatra – 如何获取服务器的域名

我正在尝试在我的Sinatra应用程序中获取域名,但作为一个新手我真的很难弄清楚如何做到这一点,我知道它一定是可能的! Rack::Request#host_with_port看起来很有前途,但我不知道如何从我的应用程序中获取这些内容 – 如何从我的Ruby代码中获取Rack中的内容? 或者还有另一种方式 – 我想我每次发生请求时都不想这样做(虽然它不是太糟糕),但我认为如果我能在应用程序中执行一次会更好加载。 任何提示?

使用Thin和Sinatra异步迭代请求的响应

如果你在Sinatra中的响应返回一个’eachable’对象,那么Sinatra的事件循环将“每个”你的结果并以流式方式产生结果作为HTTP响应。 但是,如果有对Sinatra的并发请求,它将在处理另一个请求之前迭代一个响应的所有元素。 如果我们对某些数据库查询的结果有一个游标,那意味着我们必须等待所有数据在处理并发查询之前可用。 我看过async-sinatra的gem和http://macournoyer.com/blog/2009/06/04/pusher-and-async-with-thin/ ,认为这些可以解决我的问题,但我试过了出这个例子: require ‘sinatra/async’ class AsyncTest < Sinatra::Base register Sinatra::Async aget '/' do body "hello async" end aget '/delay/:n' do |n| EM.add_timer(n.to_i) { body { "delayed for #{n} seconds" } } end end 并且/delay/5请求并不像我期望的那样同时工作,即我同时发出3个请求,Chrome的调试器将响应时间记录为大约5,10和15秒。 我错过了一些设置还是有另一种方法告诉Sinatra / Thin以并发方式处理请求? 更新:这是另一个扳手(或可能清除):运行curl -i http://localhost:3000/delay/5同时具有正确的行为(每个请求在5秒内返回2个)。 运行ab -c 10 -n 50 http://locahost:3000/delay/5 (Apache基准实用程序)也会在总时间(~25秒)内返回合理的值。 Firefox表现出与Chrome相同的行为。 什么是与命令行实用程序不同的浏览器?

处理Sinatra应用程序中的事件流连接

有一个使用 Konstantin Haase的服务器发送事件的聊天应用程序的一个很好的例子 。 我试图运行它并遇到回调问题(我使用Sinatra 1.3.2并使用Chrome 16浏览)。 它们根本不运行(例如在页面重新加载之后),因此连接数量正在增长。 此外,连接在30-60秒内关闭,除非设置定期计时器以发送空数据,如康斯坦丁在其他地方所建议的那样。 你能复制一下吗? 如果是,是否有可能以某种方式解决这些问题? WebSockets在这方面无缝工作…… # ruby get ‘/stream’, provides: ‘text/event-stream’ do stream :keep_open do |out| EventMachine::PeriodicTimer.new(20) { out << "data: \n\n" } # added settings.connections << out puts settings.connections.count # added out.callback { puts 'closed'; settings.connections.delete(out) } # modified end end # javascript var es = new […]

Sinatra中的静态页面路由(Ruby)

您可以通过将它们置于public/ (默认情况下)来为Sinatra提供静态文件 – 我目前在那里有一个index.html ,但是如何将根指向该文件而不必将其解析为模板? 为了清楚/index.html ,我可以成功访问/index.html ,并且我想路由/成为相同的静态文件,但没有重定向。 知道怎么做吗?

如何使用Rspec在Sinatra中测试助手块?

我正在编写一个sinatra应用程序并使用rspec和rack / test进行测试(如sinatrarb.com所述)。 到目前为止,它一直很棒,直到我将一些相当程序性的代码从我的域对象移动到sinatra助手。 从那时起,我一直在试图弄清楚如何孤立地测试这些?

Sinatra + Heroku + Datamapper使用dm-sqlite-adapter部署问题

出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。 请注意,当我打开任何URL时都会发生这种情况 – 而不是在git push本身。 我建立了默认的Facebook应用程序。 Gemfile: source :gemcutter gem “foreman” gem “sinatra” gem “mogli” gem “json” gem “httparty” gem “thin” gem “data_mapper” gem “heroku” group :production do gem “pg” gem “dm-postgres-adapter” end group :development, :test do gem “sqlite3” gem “dm-sqlite-adapter” end 数据映射器设置: # Setting up the database DataMapper.setup(:default, ENV[‘DATABASE_URL’] || “sqlite3://#{Dir.pwd}/data/mydatabase.db”) 打开任何URL时的相关日志片段: Starting process […]

访问Ruby哈希变量

我对ruby和sinatra很新,但基本上我有这条路线: put ‘/user_list/:user_id’ do puts request.params[“model”] end 它返回以下内容 {“password”:”36494092d7d5682666ac04f62d624141″,”username”:”nicholas”,”user_id”:106,”firstname”:”Nicholas”,”email”:”nicholas@macpractice.com”,”is_admin”:0,”lastname”:”Rose”,”privileges”:””} 我现在很难访问每个人的价值观。 它似乎不是哈希格式,所以我不能真正做到 request.params[“model”][:password] 它只返回零.. 我只需要知道如何访问这些变量,或者如何配置我的请求参数以获得良好的格式来访问变量。

Sinatra和未设置的会话变量

由于某种原因,我的应用程序中没有设置会话变量。 我正在使用Sinatra 1.2.1。 这是一段代码: module GitWiki class App “utf-8” @user = session[:user] end get “/login/?” do erb :login end post “/login” do user = User.get if user.authenticate(params[:username], params[:password]) session[:user] = params[:username] p session # => {:user=>”root”} else # AZIZ! LIGHT! end redirect ‘/’ end get “/” do p session # => {} redirect “/” + […]

Sinatra应用程序中的gzip资产

我一直在阅读使用gzip压缩您的资产将提高网站的性能。 在Sinatra应用程序中似乎有很多方法可以做到这一点,因此我希望确认最有效和最简单的方法来理解。 我遇到过 use Rack::Deflater 在运行应用程序之前应将其放在我的config.ru文件中,所以在我的情况下 require ‘./david’ use Rack::Deflater run Sinatra::Application 是吗? 是这么简单,只是添加我知道这将拉链我的所有静态资产,包括我的图像,但这些是从CDN提供,所以会有所作为? Ant帮助赞赏这个 谢谢