Tag: sinatra

为什么Sinatra请求采用EM线程?

Sinatra应用程序接收长时间运行任务的请求,EM.defer它们,在EM的20个线程的内部池中启动它们。 当EM.defer运行超过20个时,EM.defer将它们存储在EM的线程序列中。 但是,似乎Sinatra不会为任何请求提供服务,直到有一个EM线程可以处理它们。 我的问题是,是不是Sinatra假设使用主线程的反应器来服务所有请求? 当我发出新请求时,为什么我会在线程上看到添加? 重现步骤: Access /track/ Launch 30 /sleep/ reqs to fill the threadqueue Access /ping/ and notice the add in the threadqueue as well as the delay 重现它的代码: require ‘sinatra’ #monkeypatch EM so we can access threadpools module EventMachine def self.queuedDefers @threadqueue==nil ? 0: @threadqueue.size end def self.availThreads @threadqueue==nil ? 0: @threadqueue.num_waiting […]

在Sinatrapost上阅读参数

我正在研究我的第一个Sinatra应用程序,我很难从一个post请求中获取参数。 我正在使用MiniTest :: Spec,我的规格看起来像 payload = File.read(“./spec/support/fixtures/payload.json”) post “/api/v1/verify_payload”, { payload: payload }, { “CONTENT_TYPE” => “application/json” } last_response.body.must_eql payload 这是我的路线 namespace ‘/api/v1’ do post ‘/verify_payload’ do MultiJson.load(params[:payload]) end end 规范失败,因为last_response.body为空。 我在这里错过了什么吗? 我还尝试从verify_payload返回整个params ,但在这种情况下它返回一个空字符串。 更新 curl -X POST -H “Content-Type: application/json” -d ‘{“payload”:”xyz”}’ http://localhost:9292/api/v1/verify_payload 在服务器日志中不返回任何内容并且没有错误 [2014-01-06 01:16:25] INFO WEBrick::HTTPServer#start: pid=10449 port=9292 127.0.0.1 – – [06/Jan/2014 […]

用三元运算符表示条件HAML

试图用一种更简洁的方式在HAML和Ruby中表达这个条件,也许用三元运算符: – if @page.nil? %br (nothing yet) – else %br #{@page.name} (根据Neat方式寻找类似的方法来有条件地测试是否在HAML模板中添加类 ) 你的帮助将不胜感激:)

未定义的方法auto_upgrade! 将Sinatra / DataMapper应用程序推送到Heroku时

有没有人知道在Heroku的Bamboo堆栈上运行使用DataMapper的Sinatra应用程序所需的神奇咒语? Bamboo堆栈不包含任何预安装的系统gem,无论我尝试什么样的gem组合,我都会遇到此错误: undefined method `auto_upgrade!’ for DataMapper:Module (NoMethodError) 这就是我的.gems文件中的内容: sinatra pg datamapper do_postgres dm-postgres-adapter 这些是我将应用程序推送到Heroku时安装的依赖项: —–> Heroku receiving push —–> Sinatra app detected —–> Installing gem sinatra from http://rubygems.org Successfully installed sinatra-1.0 1 gem installed —–> Installing gem pg from http://rubygems.org Building native extensions. This could take a while… Successfully installed pg-0.9.0 1 gem installed […]

难以在Sinatra中访问validation错误

我有一个非常基本的forms,有一些非常基本的validation(虽然我需要稍后创建一个自定义validation…你明天可能会看到一个问题。= P),但我无法向用户显示validation错误。 这是我的主要Sinatra文件: $LOAD_PATH.unshift(File.dirname(__FILE__)) require ‘sinatra’ require ‘rubygems’ require ‘datamapper’ require ‘dm-core’ require ‘dm-validations’ require ‘lib/authorization’ DataMapper::setup(:default, “sqlite3://#{Dir.pwd}/entries.db”) class Entry include DataMapper::Resource property :id, Serial property :first_name, String, :required => true property :last_name, String, :required => true property :email, String, :required => true, :unique => true, :format => :email_address, :messages => { :presence => “You […]

如何在sinatra应用程序中html_escape文本数据?

我有一个小的Sinatra应用程序,它从ERB模板为我生成html片段。 我如何html_escape输出? Sinatra中不存在帮助器。

在同一脚本中启动并调用Ruby HTTP服务器

我想知道如何启动Ruby Rack应用程序(例如Sinatra)并在同一脚本中使用Net :: HTTP或类似方法调用它。 我可以做点什么…… require ‘sinatra/base’ require ‘net/http’ t = Thread.new do class App ‘localhost’, :port => 1234 end sleep 2 puts Net::HTTP.start(‘localhost’, 1234) { |http| http.get(‘/’) }.body t.join puts ‘Bye!’ …但是,等待Thin启动时,睡眠两秒钟并不是最佳选择。 我需要的是当服务器启动时或某人有任何其他建议时的某种回调?

在一个进程中使用什么ORM多个数据库连接sinatra应用程序?

检查ActiveRecord,DataMapper,续集:有些人使用全局变量(静态变量),有些需要在使用模型加载源文件之前打开数据库连接。 什么ORM更适合在使用不同数据库的sinatra应用程序中使用。

SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书validationMAC失败

我正在尝试使用SoundCloud SDK进行用户身份validation。 用户点击“登录”后的第一条路线: get “/login” do client = Soundcloud.new(:client_id => ‘MY_ID’, :client_secret => ‘MY_SECRET’, :redirect_uri => ‘http://localhost:9393/signed_in’) redirect client.authorize_url() end 然后我有下一个重定向的路线: get “/signed_in” do client = Soundcloud.new(:client_id => ’16d6ada1a0cfc5009f7d59d203a13b2f’, :client_secret => ‘845df7d44dc4e359fedc8ed5944d29a5’, :redirect_uri => ‘http://localhost:9393/signed_in’) code = params[:code] access_token = client.exchange_token(:code => code) end 我可以成功点击重定向url并传回代码,但我收到Sinatra的以下错误: 在/ signed_in的OpenSSL :: SSL :: SSLError SSL_connect返回= 1 errno = […]

如何使用带有Sinatra斜线的参数?

和sinatra一起玩,我遇到了一个小问题:当我使用带有斜线的参数时,它会混淆路由器引擎。 那么有没有一种很好的方法来处理这种param而不必编码呢? 代码看起来像 get ‘add/:url’ do #…. end 我打算得到像/ add / http://sctackoverflow.com/这样的东西