我有一个基于Sinatra的REST服务应用程序,我想从其中一个路由中调用其中一个资源,从而有效地组合另一个资源.例如
get '/someresource' do
otherresource = get '/otherresource'
# do something with otherresource, return a new resource
end
get '/otherresource' do
# etc.
end
Run Code Online (Sandbox Code Playgroud)
重定向不起作用,因为我需要对第二个资源进行一些处理并从中创建一个新的.显然我可以a)使用RestClient或其他一些客户端框架或者b)构造我的代码所以其他资源的所有逻辑都在一个方法中然后调用它,但是,如果我可以重新使用它感觉会更清洁使用他们的DSL从Sinatra内部使用我的资源.
我在Sinatra完成了一个非常基本的应用程序我已经在Heroku中部署了它(http://frasesbarrio.heroku.com)
Facebook上有一个共享按钮,实际上它可以用作Facebook应用程序.对于Facebook身份验证,我的应用程序有自己的app id和app secret(现在它们是源代码主文件中的两个常量)
我也想在Github上分享我的代码,供大家欣赏.
如何将带有应用程序ID和密码的代码发送到Heroku,而不是以可维护的方式将它们发送给Github?(我的意思是我会不断更改应用程序,在每次更改后部署并发送给Github)
我的主要Sinatra project_name.rb中有很多帮助器,我想将它们移到外部文件中,这样做的最佳做法是什么?
来自./preject_name.rb
helpers do
...#bunch of helpers
end
Run Code Online (Sandbox Code Playgroud)
例如./helpers/something.rb
谢谢
如何设置Sinatra以便使用响应Access-Control-Allow-Origin ="*"返回公用文件夹中的静态文件?
我试图在我的sinatra应用程序(更具体地说,一个padrino应用程序)的主页上测试重定向,在rspec中.我发现redirect_to,但它似乎只在rspec-rails中.你如何在sinatra中测试它?
所以基本上,我喜欢这样的东西:
it "Homepage should redirect to locations#index" do
get "/"
last_response.should be_redirect # This works, but I want it to be more specific
# last_response.should redirect_to('/locations') # Only works for rspec-rails
end
Run Code Online (Sandbox Code Playgroud) 确定环境的正确方法是什么?现在我正在使用:
class Main < Sinatra::Base
get '/' do
puts self.class.development?
puts self.class.production?
end
end
Run Code Online (Sandbox Code Playgroud)
但这似乎不对.
所以我正在为Windows和Linux开发Sinatra.问题是我使用的是Thin而不是Webrick,而eventmachine for windows仅适用于预发布版本,而linux使用最新的稳定版本.在gemfile中你当然不能包含不同版本的相同gem,如下所示:
gem "eventmachine", "~> 1.0.0.beta.4.1", :group => :development_win
gem "eventmachine", group => :development_linux
gem "thin
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法解决这个问题,可能使用一个用于windows的gemfile和一个用于linux的gemfile,该命令将加载一个或另一个.
或者有一种方法可能在git中管理两个不同平台的gemfile,也许只通过文件的分支(不知道这是否可能来自我读过的git分支).
有没有办法创建一个"之前"过滤器来捕获和预处理Sinatra中的所有POST请求?
我正在编写一个sinatra应用程序并使用rspec和rack/test进行测试(如sinatrarb.com所述).
到目前为止,它一直很棒,直到我将一些相当程序化的代码从我的域对象移动到sinatra助手.
从那时起,我一直在试图弄清楚如何隔离测试这些?
给定Hash,基于要使用的键列表创建子集Hash的最有效方法是什么?
h1 = { a:1, b:2, c:3 } # Given a hash...
p foo( h1, :a, :c, :d ) # ...create a method that...
#=> { :a=>1, :c=>3, :d=>nil } # ...returns specified keys...
#=> { :a=>1, :c=>3 } # ...or perhaps only keys that exist
Run Code Online (Sandbox Code Playgroud)
在续集数据库工具包允许一个通过传递一个Hash创建或更新模型实例:
foo = Product.create( hash_of_column_values )
foo.update( another_hash )
Run Code Online (Sandbox Code Playgroud)
该西纳特拉 Web框架使可用命名一个哈希params包括表单变量,查询字符串参数也路由匹配.
如果我创建一个只包含与数据库列相同的字段的表单并将其发布到此路由,则一切都非常方便:
post "/create_product" do
new_product = Product.create params
redirect "/product/#{new_product.id}"
end
Run Code Online (Sandbox Code Playgroud)
然而,这既脆弱又危险.这是危险的,因为恶意黑客可以发布一个表格,其中的列不打算更改并更新.它很脆弱,因为在这条路线上使用相同的形式是行不通的:
post "/update_product/:foo" do |prod_id| …Run Code Online (Sandbox Code Playgroud)