我正在编写一个Sinatra应用程序,它将使用SendGrid发送电子邮件.他们提供了一个用于发送电子邮件的REST API,我想找出调用该API并获得响应的最佳方法.
通话的格式是:
https://sendgrid.com/api/mail.send.xml?api_user=youremail@domain.com&api_key=secureSecret&to=destination@example.com&toname=Destination&subject=Example%20Subject&text=testingtextbody&from=info@domain.com
Run Code Online (Sandbox Code Playgroud)
响应是XML格式,我需要解析它以检查是否成功.有关更多信息,请访问http://sendgrid.com/documentation/ApiWebMail
完成调用和解析返回的最佳方法是什么?
我正在使用带有Ruby 1.9.2的Sinatra 1.2.0(我需要在这个项目中使用这个版本的Ruby)并且我不知道为什么我一直得到这个SyntaxError.我在index.erb中使用以下内容时可以重现此错误:
<% @status = "foo" %>
The case is: <br />
<% case @status %>
<% when "foo" %>
It's a FOO!
<% when "bar" %>
It's a BAR!
<% else %>
It's something else...!
<% end %>
Run Code Online (Sandbox Code Playgroud)
错误:
SyntaxError at /
/Users/foo/Workspace/sinatra_case_test/views/index.erb:4: syntax error, unexpected tIVAR, expecting keyword_when ; case @status ; @_out_buf.concat "\n " ^
/Users/foo/Workspace/sinatra_case_test/views/index.erb:5: syntax error, unexpected keyword_when, expecting keyword_end ; when "foo" ; @_out_buf.concat "\n …Run Code Online (Sandbox Code Playgroud) 我正在使用Sinatra和DataMapper开发RESTful API.当我的模型验证失败时,我想返回JSON以指示哪些字段出错.DataMapper在我的类型模型中添加了"errors"属性DataMapper::Validations::ValidationErrors.我想返回此属性的JSON表示.
这是一个单独的文件示例(得爱Ruby/Sinatra/DataMapper!):
require 'sinatra'
require 'data_mapper'
require 'json'
class Person
include DataMapper::Resource
property :id, Serial
property :first_name, String, :required => true
property :middle_name, String
property :last_name, String, :required => true
end
DataMapper.setup :default, 'sqlite::memory:'
DataMapper.auto_migrate!
get '/person' do
person = Person.new :first_name => 'Dave'
if person.save
person.to_json
else
# person.errors - what to do with this?
{ :errors => [:last_name => ['Last name must not be blank']] }.to_json
end
end
Sinatra::Application.run!
Run Code Online (Sandbox Code Playgroud)
在我的实际应用程序中,我正在处理POST或PUT,但为了使问题易于重现,我正在使用GET,以便您可以使用或浏览器.curl http://example.com:4567/person
所以,我所拥有的person.errors和我正在寻找的JSON输出就像哈希产生的那样: …
我维护一个充当JSON API服务的Sinatra应用程序.该API由另一个Web应用程序以及移动应用程序使用.
我想做的是让Rack :: CommonLogger从其日志中排除敏感信息,如密码.Rails启用了此设置,但我没有找到有关如何在Sinatra中执行此操作的文档.
任何帮助,将不胜感激.
我想知道是否有人知道如何从views文件夹中的文件夹中呈现.haml模板.我的目录设置是:
-Views (Folder)
-Get_Started (Folder)
-step_1.haml
-index.haml
Run Code Online (Sandbox Code Playgroud)
我想渲染step_1.haml但是当我尝试时:
haml :get_started/step_1
Run Code Online (Sandbox Code Playgroud)
它不起作用,我得到一个空白页面.有什么建议?我本来可以发誓我已经看过如何在某处做到这一点,但我不记得在哪里.
这些params来自erb模板中的html输入(这段代码在主要内容中application.rb),我在检查它们是否在我添加它们之前被填充n.requestusers,这将成为数据库条目的一部分.它有效,但感觉就像现在的bash脚本一样.写这样的东西最好的方法是什么?
主.rb中的路线
if params[:user2].empty? && params[:user3].empty? && params[:user4].empty? && params[:user5].empty?
n.requestusers = params[:user1]
elsif params[:user3].empty? && params[:user4].empty? && params[:user5].empty?
n.requestusers = params[:user1], params[:user2]
elsif params[:user4].empty? && params[:user5].empty?
n.requestusers = params[:user1], params[:user2], params[:user3]
elsif params[:user5].empty?
n.requestusers = params[:user1], params[:user2], params[:user3], params[:user4]
else
n.requestusers = params[:user1], params[:user2], params[:user3], params[:user4], params[:user5]
end
Run Code Online (Sandbox Code Playgroud) 我刚开始看南希,我正在使用Tekpub的Sinatra Video(Nancy的基础),看看它能做些什么.视频中演示的一件事是将请求信息输出回浏览器(请求方法,请求路径等).当我使用ASP.Net Web Forms时,我可以在Request对象中获取该信息,但是我没有在文档中看到任何显示我如何在Nancy中执行此操作的内容.我知道Nancy.Request对象中有一个Headers字段,但它没有给我所有我想要的信息.下面是我要转换为C#和Nancy的原始Sinatra代码:
class HelloWorld
def call(env)
out = ""
env.keys.each {|key| out+="#{key}=#{env[key]}"}
["200",{"Content-Type" => "text/plain"}, out]
end
end
run HelloWorld.new
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Facade API,通过Sinatra接收请求,然后在后端的Github API上启动HTTP请求.
在我的"你好世界"剧本中我有:
#!/usr/bin/ruby
require 'httpclient'
require 'sinatra'
get '/foo' do
"hello world"
end
Run Code Online (Sandbox Code Playgroud)
但是,它会遇到如下错误:
$ ./api.rb
/usr/local/share/gems/gems/sinatra-1.4.3/lib/sinatra/base.rb:1408:in `run!': undefined method `run' for HTTP:Module (NoMethodError)
from /usr/local/share/gems/gems/sinatra-1.4.3/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.如果我注释掉该require 'httpclient'行,它就可以正常工作:
#!/usr/bin/ruby
#require 'httpclient'
require 'sinatra'
get '/foo' do
"hello world"
end
$ ./api.rb
[2013-06-26 21:43:12] INFO WEBrick 1.3.1
[2013-06-26 21:43:12] INFO ruby 1.9.3 (2013-05-15) [x86_64-linux]
[2013-06-26 21:43:12] WARN TCPServer Error: Cannot assign requested address - bind(2)
== Sinatra/1.4.3 has taken the stage on 4567 for …Run Code Online (Sandbox Code Playgroud) 您在Sinatra应用程序中使用的验证码是什么?
我喜欢谷歌的http://www.google.com/recaptcha,但似乎不适用于Sinatra(不过有Rails的插件).谷歌搜索后,插件,如https://github.com/jpoz/sinatra-recaptcha或https://github.com/bmizerany/sinatra-captcha似乎总是有5年...
谢谢!
我正在使用Ruby和Sinatra作为我的应用程序.
我想分配一个将在不同的类和方法中使用的变量.
在我的应用程序文件中,即'Millennium'是我的应用程序名称,因此应用程序文件millennium.rb包含:
require 'rubygems'
require 'sinatra'
require 'yaml'
require 'active_record'
require 'sidekiq'
require 'statsd'
custom_statsd = Statsd.new('localhost', 8125) #custom_statsd available across the application.
class Millennium < Sinatra::Application
set :use_queueing_in_dev, false # useful for debugging queue issues.
set :protection, :except => [:json_csrf]
configure do
# These allow our error handlers to capture the errors
disable :raise_errors
disable :show_exceptions
enable :logging
end
before do
#logger.info request.body.read
request.body.rewind
end
end
Run Code Online (Sandbox Code Playgroud)
在这里,我想custom_statsd在我的应用程序的任何类中使用变量的值.
我认为使用"$"不是一个好主意.请告诉我这是另一种方法.
谢谢!!!!