现在我们的应用程序正在 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) 刚刚修改了 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 方法中使用参数并不重要。我可以在里面有一些疯狂的代码,它仍然会抛出同样的错误
我知道我可以使用“params”检索 Sinatra 中的每个参数。但是,如何仅检索发布参数?我需要验证一个参数是由 POST 发送的,否则它应该被忽略。
谢谢。
class Foo
def do_before
...
end
def do_something
...
Run Code Online (Sandbox Code Playgroud)
有没有办法do_before在Foo类中的每个其他方法之前运行方法(比如do_something)?
似乎Sinatra before块在每个HTTP请求之前运行,这与此类无关.
编辑:正如Michael在评论中指出的那样,Rails提供的唯一类似功能是在Controller中.但是,Rails和Sinatra都提供类似于此功能的东西.
我试图使用/ 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)
任何想法为什么这不起作用?这是最好的地方吗?
我正在使用 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 下工作的东西?
我有一个Sinatra应用程序,我想开始在Rails中构建新功能,同时仍然支持现有的Sinatra功能.我尝试了以下策略:
我的许多搜索产生了rails 3,而不是4.另外,Rails 必须生成数据库而不是使用Sinatra使用的数据库(在这种情况下,Sequel gem访问Sqlite3.)一般来说,我得到的错误是关于宝石和路径.(虽然我确实重新绑定并尝试不同版本的路径.)
有关使用Rails 4的最佳方法的任何建议,同时仍支持现有的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)
谢谢
我有一个问题,我需要为iOS应用创建一个API.此API将是私有的,仅适用于iOS App,我不知道我必须使用哪个框架.赖斯?西纳特拉?Rails的API?
你有什么建议?
谢谢!
我之前尝试过使用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的教程跨越多年 - 有些痛苦地过时了,没有一个解释如何运行工人,所以他们不会失败.
提前致谢.