Tag: sinatra

这对于s​​inatra + angular.js +自定义提供程序的Oauth2工作流的概念是否正确?

我想构建三个示例应用程序。 一个是sinatra oauth2提供者,第二个是rails应用程序,前端是angular.js,后端是rails,第三个是后端的sinatra和前端的angular.js。 我们的Rails / Sinatra应用程序将使用satelizer和我们的自定义提供程序对用户进行身份validation。 这些是我们现在的Oauth2工作流程。 使用Satellizer,我们从提供商处获取授权码。 我们将此代码发送到我们的后端。 在使用此授权码,密钥和其他参数的后端,我们向提供商发送请求以获取访问令牌。 使用此获取访问令牌,我们调用’/me’操作以从提供者获取uid,电子邮件和其他用户属性。 在同一个操作中,我们解析响应主体,并根据uid查找或创建用户。 我们想知道这个步骤应该以某种方式设置用户的身份validation令牌。 将提供者访问令牌存储在用户数据库记录中。 生成新的身份validation令牌并在每个请求上更改它 使用用户uid和令牌生成JWToken并将其发送回卫星器。 然后在每个请求上, Satellizer在标头中包括Bearer JWToken 。 在recive请求我们的后端validation存储在数据库中的标头令牌并在我们的案例devise(sign_in, store: false)调用sing_in方法devise(sign_in, store: false)可能在sinatra app中我们将使用warden。 您如何看待这个概念? 也许我们错过了什么。 这是我们的第一个oauth2身份validation实现,我们对此感到担忧。

Sinatra 1.3 Streaming w / Ruby stdout重定向

我想使用1.3中引入的Sinatra的Streamingfunction以及一些stdout重定向。 它基本上是一个长期工作的实时流输出。 我在自述文件中查看了这个问题和Sinatra流式传输示例。 在OSX上运行1.8.7: require ‘stringio’ require ‘sinatra’ $stdout.sync = true module Kernel def capture_stdout out = StringIO.new $stdout = out yield out ensure $stdout = STDOUT end end get ‘/’ do stream do |out| out << "Part one of a three part series… \n” sleep 1 out << "…part two… \n” sleep 1 out […]

如何将路线映射到Sinatra的控制器?

我想使用Sinatra创建一个简单的实验性MVC框架。 我想按名称”pages”定义资源,例如应该解析为: /pages (index) /pages/new /pages/:id/show (show) 如同映射到app/controllers/PagesController.rb ,相应的get(‘/’)负责索引, post(‘/pages/create’)负责创建等。 在阅读官方文档之后,我甚至感到非常困惑。 我想我需要使用非经典的Sinatra模型,但有人能指出我正确的方向吗? 谢谢

将HTML表单发布到remote.cgi – 用Ruby编写?

我正在一个托管在微软办公室现场服务上的网站上工作。 它有一个联系表格,使访客可以与业主联系。 我想编写一个位于单独服务器上的Ruby脚本,表单将POST到该脚本。 它将解析表单数据并通过电子邮件将详细信息发送到预设地址。 然后,该脚本应将浏览器重定向到确认页面。 我有一台运行nginx和postfix的ubuntu hardy机器。 安装了Ruby,我们将看到使用Thin和它的Rackfunction来处理脚本。 现在是编写脚本,我画了一个空白。 已经很长时间了,如果我没记错的话,这个过程是这样的。 读取HTTP标头 解析参数 发送电子邮件 发送重定向标头 从广义上讲,问题已得到解答。 弄清楚如何使用答案比预期更复杂,我认为值得分享。 第一步: 我非常突然地了解到nginx并不直接支持cgi脚本。 您必须使用其他一些进程来运行脚本并获取nginx来代理请求。 如果我在php中这样做(后来我认为这将是一个更自然的选择)我可以使用像php-fcgi这样的东西,并期望生活会非常直接。 Ruby和fcgi感觉相当令人生畏。 但如果我们放弃在运行时加载这些东西的理想,那么Rack可能是最直接的解决方案,而Thin包含我们所需要的一切。 学习如何使用它们制作基本的小应用程序对像我这样的相对Rails新手来说是非常有益的。 Rails应用程序的基础似乎隐藏了很长时间,而Rack帮助我进一步拉开窗帘。 尽管如此,遵循耶胡达的建议并查找sinatra是另一个惊喜。 我现在有一个在Thin实例中运行的基本sinatra应用程序。 它通过unix socket与nginx通信,我收集的是标准方式。 Sinatra以非常优雅的方式处理不同的请求和路由到应用程序。 您只需要一个get ‘/’ {}来开始处理对虚拟主机的请求。 要添加更多(以干净的方式),我们只需在主文件中包含routes / script.rb即可。 # cgi-bin.rb # main file loaded as a sinatra app require ‘sinatra’ # load cgi routes require ‘routes/default’ require ‘routes/contact’ […]

我如何在sinatra的ruby中使用类似的查询?

这是我试过的查询: @blogs = DB[:blogs].where(:title => params[:s_txt]).reverse_order(:id) 在这个查询中,我想在我的数据库中找到博客。 我还需要创建一个查询,为用户提供更多结果。 我怎样才能做到这一点?

如何获取haml中的一系列复选框?

我在作为Sinatra服务器的一部分实现的例程中有一个名为@theModels的字符串数组。 这些模型是供用户选择的选项,由后端获取(想法是,随着新模型的添加,前端代码不应更改)。 我正在使用haml来渲染html。 如何枚举@theModels列表中的每个元素,使每个元素都是一个复选框? 如何获取用户选择的复选框? 我看到只是放 = @theModels 将给我@theModels中包含的字符串列表,但没有间距等,当然也不在复选框中。 我发现这个问题似乎很相似,但我的haml-fu还不够好,无法将其转化为我需要的东西。 更新: 这些是与文件上传相关的选项,现在代码如下所示: %form{:action=>”/Upload”,:method=>”post”,:enctype=>”multipart/form-data”} – @theModelHash.each do |key,value| %br %input{:type=>”checkbox”, :name=>”#{key}”, :value=>1, :checked=>value} =key %input{:type=>”file”,:name=>”file”} %input{:type=>”submit”,:value=>”Upload”} 问题是,在每个选项上放置文件上传按钮,而不是在最后。 我最后只想要一个提交按钮; 我应该有两个表单,当按下“上传”按钮时,它们都会报告结果吗? UPDATE2: 经过一段时间的思考,上面的内容可以修改为: 谢谢! %form{:action=>”/Upload”,:method=>”post”,:enctype=>”multipart/form-data”} – @theModelHash.each do |key,value| %br %input{:type=>”checkbox”, :name=>”#{key}”, :value=>1, :checked=>value} =key %form{:action=>”/Upload”,:method=>”post”,:enctype=>”multipart/form-data”} %input{:type=>”file”,:name=>”file”} %input{:type=>”submit”,:value=>”Upload”} 这似乎做我想要的。

在Sinatra中缓存twitter gem tweet的简单方法?

我遇到API限制请求,最终导致我的网站爆炸。 现在为了避免我在一个救援块中从Twitter gem获得推文请求,如果发生了不好的事情,它会返回一个默认字符串。 我想知道什么是最简单的缓存最新推文的方法: @twitter = Twitter.user_timeline(“some_user”, :include_rts => 1, :count => 1).first 如果达到API限制?

在查看Sinatra表单时,为什么会收到“Errno :: ENOENT:没有这样的文件或目录”?

我正在尝试按照本教程: http://net.tutsplus.com/tutorials/ruby/singing-with-sinatra/ 陷入困境“我们还将使用” 视图文件 “,它允许我们将视图的标记拆分为单独的文件。” 我的basics.rb文件运行正常。 我的文件存储如下: Desktop/RubyForm/basics.rb Desktop/RubyForm/view/form.erb 但是,现在当我去http://localhost:9393/form ,我受到了欢迎: Errno::EIO at /form Input/output error – file: lint.rb location: write line: 398 sinatra.error Errno::ENOENT: No such file or directory – /Users/HelenasMac/Desktop/views/form.erb UPDATE! : 运行ruby basics.rb并转到http://localhost:4567/form 。 但是,在我运行“shotgun basics.rb”之后,我必须转到http://localhost:9393/form ,这就是表单没有显示的时候。 我究竟做错了什么? 免责声明:巨型初学者使用ruby并使用终端。 提前致谢!

使用自定义gem在Dreamhost / Passenger上部署Sinatra应用程序

我有一个Sinatra应用程序,我试图在Dreamhost上运行,利用小马发送电子邮件。 为了在一开始就启动并运行应用程序(在添加小马之前),我不得不将gem unpack sinatra gem unpack rack和gem unpack sinatra到vendor /目录中,所以这是我的config.ru: require ‘vendor/rack/lib/rack’ require ‘vendor/sinatra/lib/sinatra’ set :run, false set :environment, :production set :views, “views” require ‘public/myapp.rb’ run Sinatra::Application 我已经完成了gem install pony和gem unpack pony (进入vendor /)。 之后,我尝试向config.ru添加require ‘vendor/sinatra/lib/pony’ ,只是让Passenger抱怨小马的依赖 (mime-types,tmail)也没有找到! 必须有一种更好的方式来使用其他gem并降低那些冗长,丑陋,多余的requires 。 有什么想法吗?

Rails + Sinatra应用程序共享会话

我还没有找到一个好的答案。 如何才能将我的Rails应用程序和Sinatra应用程序(安装在我的Rails应用程序的config.ru中)成功共享会话? 如果我首先访问我的Sinatra应用程序,然后是Rails应用程序,我得到一个错误,如undefined method sweep for {}:Hash ,大概是因为Rails使用Hash的自定义子类来存储会话信息,而Rack :: Session :: Cookie不会“T。 我的代码到目前为止: config.ru map “/” do run MyRailsApp::Application end map “/sinatra” do use Rack::Session::Cookie, key: “_app_session”, secret: “” run MySinatraApp end 配置/初始化/ session_store.rb MyRailsApp::Application.config.session_store :cookie_store, key: ‘_app_session’ 配置/初始化/ secret_token.rb MyRailsApp::Application.config.secret_token = “” # same as config.ru 我错过了什么?