标签: sinatra

获取调用者的 Ruby 异常调用者

现在我们的应用程序正在 Heroku 上运行,为了避免重启和可能的延迟,应用程序被设计为缓存所有错误并将它们发送到 stderr 并只提供一个陈旧的缓存,直到问题通过另一个推送得到解决。这可以防止应用程序删除...

然而,日志一直被我们不想要的整个跟踪过度填满,所以我构建了一个小片段(部分从 Rails 中窃取)来解析调用者并只发送该行,但是从救援中发送错误,我们接错了线路,所以我想知道如何找到来电者或来电者,或者是否有更好的方法来处理这种情况。这是片段:

module StdErr
  def error(message)
    file = 'Unknown'
    line = '0'

    if /^(.+?):(\d+)(?::in `(.*)')?/ =~ caller[1]
      file = $1
      line = $2
    end

    $stderr.puts "ERROR: #{message} on line #{line} of #{file}"
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby debugging sinatra

2
推荐指数
1
解决办法
1473
查看次数

无法使用 Curl 在 Sinatra 中接受帖子

刚刚修改了 Sinatra 并试图让一个安静的网络服务运行起来。不过,我目前遇到的错误非常具体。

拿这个例子post方法

post '/postMan/:someParam' do
    #Edited here. This code can be anything. 411 is still the response
    puts params[:someParam]

end
Run Code Online (Sandbox Code Playgroud)

看起来很简单。获取一个参数,从中创建一个对象,然后以对象保存方法定义的任何方式存储它。

这是我用来使用 Curl 发布数据的内容

$curl -I -X POST http://127.0.0.1/postman/123456
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,我收到了 411,但不知道为什么。据我所知,411 是必需的长度。这是踪迹

HTTP/1.1 411 Length Required 
Content-Type: text/html; charset=ISO-8859-1
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
Date: Fri, 02 Mar 2012 22:27:09 GMT
Content-Length: 303
Connection: close
Run Code Online (Sandbox Code Playgroud)

我“无法”以任何方式更改 curl 消息。那么可能有人有办法在 sinatra 中设置要忽略的内容长度吗?或者一些不涉及更改 curl 请求的修复?


作为记录,我是否在 Post 方法中使用参数并不重要。我可以在里面有一些疯狂的代码,它仍然会抛出同样的错误

ruby rest post curl sinatra

2
推荐指数
1
解决办法
3966
查看次数

Sinatra,仅检索帖子参数

我知道我可以使用“params”检索 Sinatra 中的每个参数。但是,如何仅检索发布参数?我需要验证一个参数是由 POST 发送的,否则它应该被忽略。

谢谢。

ruby sinatra

2
推荐指数
1
解决办法
969
查看次数

如何在Sinatra中过滤之前创建Rails?

class Foo
  def do_before
    ...
  end

  def do_something
    ...
Run Code Online (Sandbox Code Playgroud)

有没有办法do_beforeFoo类中的每个其他方法之前运行方法(比如do_something)?

似乎Sinatra before块在每个HTTP请求之前运行,这与此类无关.

编辑:正如Michael在评论中指出的那样,Rails提供的唯一类似功能是在Controller中.但是,Rails和Sinatra都提供类似于此功能的东西.

ruby sinatra

2
推荐指数
1
解决办法
1685
查看次数

使用Sinatra安排rake任务

我试图使用/ rufus-scheduler gems来安排rake任务在Sinatra中运行.我似乎无法完成任务.

这是我一直在尝试的:

class App < Sinatra::Base
...
    configure :development do
       every 1.minute do
         p "The task is running"
       end     
    end
end
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这不起作用?这是最好的地方吗?

ruby sinatra whenever rufus-scheduler

2
推荐指数
1
解决办法
2483
查看次数

will_paginate helper 在 sinatra 中未定义与 mongoid

我正在使用 sinatra 1.4.3 和 mongoid 3.1.4。我尝试从 master 分支添加 will_paginate gem 以获得 mongoid 支持,所以我将它添加到我的 gemfile 中:

gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', 
                     :branch => 'master'
Run Code Online (Sandbox Code Playgroud)

在 environment.rb 中,我添加了:

require 'will_paginate'
require 'will_paginate/mongoid'
Run Code Online (Sandbox Code Playgroud)

分页方法开始工作。我对 will_paginate 助手仍有问题。在我看来,我收到如下错误:

NoMethodError: undefined method `will_paginate' for #<Class:0x006ff5df8578b0>
Run Code Online (Sandbox Code Playgroud)

我是否缺少帮助在 sinatra 下工作的东西?

ruby sinatra will-paginate mongoid

2
推荐指数
1
解决办法
704
查看次数

如何让一个sinatra应用程序在rails 4中运行?

我有一个Sinatra应用程序,我想开始在Rails中构建新功能,同时仍然支持现有的Sinatra功能.我尝试了以下策略:

  1. sinatra的机架将一些请求路由到轨道,一些请求路由到sinatra
  2. sinatra的机架包括导轨
  3. rails'stackup包括sinatra.

我的许多搜索产生了rails 3,而不是4.另外,Rails 必须生成数据库而不是使用Sinatra使用的数据库(在这种情况下,Sequel gem访问Sqlite3.)一般来说,我得到的错误是关于宝石和路径.(虽然我确实重新绑定并尝试不同版本的路径.)

有关使用Rails 4的最佳方法的任何建议,同时仍支持现有的Sinatra应用程序?

ruby ruby-on-rails sinatra ruby-on-rails-4

2
推荐指数
1
解决办法
3041
查看次数

在Sinatra帖子上阅读参数

我正在研究我的第一个Sinatra应用程序,我很难从一个帖子请求中获取参数.

我正在使用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
Run Code Online (Sandbox Code Playgroud)

这是我的路线

namespace '/api/v1' do
  post '/verify_payload' do
    MultiJson.load(params[:payload])
  end
end
Run Code Online (Sandbox Code Playgroud)

规范失败,因为last_response.body是空的.

我在这里错过了什么吗?

我也试图返回整个params,verify_payload但在这种情况下,它返回一个空字符串.

更新

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' http://localhost:9292/api/v1/verify_payload
Run Code Online (Sandbox Code Playgroud)

在服务器日志中不返回任何内容并且没有错误

[2014-01-06 01:16:25] INFO  WEBrick::HTTPServer#start: pid=10449 port=9292
127.0.0.1 - - [06/Jan/2014 01:16:27] "POST /api/v1/verify_payload HTTP/1.1" 200 6 0.0220
Run Code Online (Sandbox Code Playgroud)

谢谢

ruby json sinatra

2
推荐指数
1
解决办法
3381
查看次数

使用Rails或Sinatra来构建Restful API?

我有一个问题,我需要为iOS应用创建一个API.此API将是私有的,仅适用于iOS App,我不知道我必须使用哪个框架.赖斯?西纳特拉?Rails的API?

你有什么建议?

谢谢!

ruby-on-rails sinatra

2
推荐指数
1
解决办法
3159
查看次数

Resque任务总是失败 - 未初始化的作业常量?

我之前尝试过使用Resque并遇到了彻底的失败.我正在重新审视它,结果相同......

resque.rake:

require "resque/tasks"

task "resque:setup" => :environment
Run Code Online (Sandbox Code Playgroud)

test.rb:

require 'resque'

class FileWorker
  @queue = :save_to_file

  def self.perform(str)
    File.open('./' + Time.now.to_s + '.txt', 'w+') do |f|
      f << "test 123"
    end
  end
end

Resque.enqueue(FileWorker, "12345567".split('').shuffle.join)
Run Code Online (Sandbox Code Playgroud)

Gemfile:

gem 'resque'
gem 'rake'
Run Code Online (Sandbox Code Playgroud)

看起来像test.rb自己运行成功地排队工作:

在此输入图像描述

但是,rake resque:work QUEUE='*'在同一文件夹中运行会导致警告,

警告:现在不推荐使用这种信号处理方式.有关详细信息,请参阅http://hone.heroku.com/resque/2012/08/21/resque-signals.html.

以及添加到"失败"队列的任务以及以下原因: "exception":"NameError","error":"uninitialized constant FileWorker"

我如何让它工作?看起来很明显,但有很多关于Resque的教程跨越多年 - 有些痛苦地过时了,没有一个解释如何运行工人,所以他们不会失败.

提前致谢.

ruby background heroku sinatra resque

2
推荐指数
1
解决办法
2619
查看次数