标签: sinatra

Ruby/Sinatra的Geo位置?

我正在Sinatra创建一个小应用程序,我想从他们的邮政编码(他们会输入),他们与其他用户之间的距离(通过邮政编码)确定用户的城市,并且可能是热量拉链的地图.

我该怎么做?我已经尝试了geoip gem,但它似乎没有做我想要的.我会使用像谷歌地图这样的外部服务(显然我需要这个用于热图)吗?

谢谢你的帮助.

ruby geolocation sinatra

7
推荐指数
1
解决办法
2631
查看次数

使用Sinatra和rspec对控制器方法进行存根

所以我试图想出一种方法来为一个Sinatra应用程序在rspec中存储一个控制器方法.其主要原因是测试应用程序的逻辑流程,并确保在满足某些条件时调用必要的函数.所以,从本质上讲,我希望能够做类似的事情

controller.should_receive(:fancy_method).and_return("This is a string")
Run Code Online (Sandbox Code Playgroud)

我遇到的困难是访问sinatra应用程序中的控制器实例.我能够使用sinatra控制器类上的class_eval覆盖当前函数,但我想断言这些函数实际运行.

有人有什么建议吗?

谢谢.

ruby rspec sinatra

7
推荐指数
1
解决办法
2983
查看次数

没有这样的文件来加载乘客和Sinatra

我最近更新到Ruby 1.9.2(RVM),Sinatra 1.1和Passenger 3.0.0.我有一个简单的应用程序组成:

# config.ru

require 'rubygems'
require 'sinatra'
require 'app.rb'

run Sinatra::Application

# app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  erb :index
end
Run Code Online (Sandbox Code Playgroud)

如果我使用ruby app.rbeverythign按预期从终端运行应用程序.但是,乘客我得到:no such file to load -- app.rb.我有其他Rails应用程序运行良好的设置,并已将文档根设置为子公共目录.任何想法如何解决这一问题?谢谢!

passenger sinatra

7
推荐指数
2
解决办法
2884
查看次数

使用Ruby Sinatra创建单页代理

我正在尝试使用Ruby Sinatra为特定网页创建一个简单的代理.我可以用C#来做,我似乎无法为Sinatra工作,C#代码如下:

<%@ WebHandler Language="C#" Class="Map" %>

using System;
using System.Web;
using System.Net;
using System.IO;

public class Map : IHttpHandler {

static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[0x1000];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        output.Write(buffer, 0, read);
}

public void ProcessRequest(HttpContext context)
{
    string gmapUri = string.Format("http://maps.google.com/maps/api/staticmap{0}", context.Request.Url.Query);
    WebRequest request = WebRequest.Create(gmapUri);

    using (WebResponse response = request.GetResponse())
    {
        context.Response.ContentType = response.ContentType;
        Stream responseStream = response.GetResponseStream();

        CopyStream(responseStream, context.Response.OutputStream);
    }
}

public bool …
Run Code Online (Sandbox Code Playgroud)

ruby proxy sinatra

7
推荐指数
1
解决办法
4289
查看次数

使用模块化Sinatra应用程序设置Cucumber,Capybara和RSpec

这是我的 config.ru

$:.unshift File.join(File.expand_path(File.dirname(__FILE__)), 'config')
require 'boot'

Routes = Rack::Mount::RouteSet.new do |set|
  set.add_route App::Users, { :path_info => %r{^/users*} }, {}, :users
  set.add_route App::Dashboard, { :path_info => %r{^/$} }, {}, :dashboard
  set.add_route Rack::File.new(File.dirname(__FILE__) + "/public"), { :path_info => %r{^/*} }, {}, :public
end

run Routes
Run Code Online (Sandbox Code Playgroud)

boot.rb

require 'bundler'
Bundler.setup
Bundler.require(:default)
Mongoid.load!(File.join(File.dirname(__FILE__), '/mongoid.yml'))
%w(sinatra json yaml rack/mount rack/contrib).each {|l| require l }
Dir["./lib/**/*.rb"].each { |f| require f }
Run Code Online (Sandbox Code Playgroud)

lib包含应用程序和模型.

如何让Cucumber看到我的申请:

这是黄瓜 env.rb

require 'capybara'
require 'capybara/cucumber'
require 'rspec'

World do …
Run Code Online (Sandbox Code Playgroud)

rspec sinatra cucumber capybara

7
推荐指数
2
解决办法
3062
查看次数

使用right.js用flash [:notice]的内容刷新div?

我在我的sinatra应用程序中使用内联haml模板.我有一个@@layout像这样的部分:

#message
  - if flash[:notice]
    %section.notice= flash[:notice]
  - if flash[:error]
    %section.error= flash[:error]
Run Code Online (Sandbox Code Playgroud)

当我使用flash[:notice]="你好!" 在路线中点击一个链接,下一页愉快地说"你好"在#messagediv中.很棒.

所以这就是问题所在,我正在使用right.js为我的应用程序添加一些ajax的好处,机架式闪存的行为充其量是不一致的.

大多数情况下,你单击一个链接(.linkey),一点点javascript拦截它并加载到#contentdiv(这部分也可以),然后重新加载'#message'div并显示前一个动作的flash ...下次单击链接时...大约80%的时间,其余时间没有显示任何内容.

这是我的js:

"a.linkey".onClick(function(event) {
   event.stop();
   $('content').load( [ "/", this.get('id'), ].join("") );
   $('message').load( '/message' );
});
Run Code Online (Sandbox Code Playgroud)

我希望是这样的:

1)点击链接

2)链接目标(/ foo)被加载到 #content

3)#message重新加载消息(来自route flash[:notice]="bar")

4)#content现在显示/foo#message显示"bar"

我也尝试了这个,$('message').load( '/message' );但要么加载任何东西#message或填充#message"/ message"(字符串不是内容).

我想知道这里发生了什么?是机架式闪存还是right.js?或者是其他东西?如果需要的话,我可以提供更多的代码,但除了基本框架之外,我刚刚开始这个项目.

javascript ruby haml sinatra rightjs

7
推荐指数
1
解决办法
317
查看次数

在本地测试Sinatra上的HTTPS

当我通过HTTPS访问时,我需要测试页面上某些元素的行为 - 我想知道如何使用HTTPS在本地测试这个sinatra应用程序.如果我的问题甚至没有意义,我很抱歉,但我想通过HTTPS通过我的网络浏览器连接到localhost.

ruby thin sinatra

7
推荐指数
1
解决办法
1841
查看次数

在单个服务器上托管多个rails服务+"api enabled"网站的体系结构

我刚刚阅读了Paul Dix的着作"面向服务的设计与RoR",我想根据我刚刚学到的内容创建一个Rails 3 Web应用程序.

我认为我的基本架构是正确的,但是一个简单的问题就是阻止我:我应该如何在同一台服务器上托管多个REST服务?

这就是我现在看到的事情:

  • 基于Sinatra创建*服务应用程序(UserService,XYZFeatureService,...)(我猜),它提供REST端点来访问资源
  • 有一个前端Rails应用程序与控制器/视图/ ...消耗来自不同服务的数据.例如,最终用户可以访问它http://www.myapp.com.
  • 最后有一个独立的"API"应用程序来处理调用https://api.myapp.com/*https://www.myapp.com/api/*发布外部API,这些外部API将使用相同的服务,并在其上进行可能的身份验证,限制等.

这听起来像是一个好的开始吗?

就实现而言,从我在书中所读到的,我计划创建gems来处理rails app和服务之间的通信(我可能会抛出一些RabbitMQ但这是另一个故事).

但是,由于我只有一台物理服务器,我想知道如何让所有这些应用程序/服务一起生活?我的第一个猜测是在localhost上启动每个服务应用程序:xxxx其中xxxx是每个服务的不同非特权端口.我可以在rails应用程序中配置每个客户端gem以使用这些端口.

除此之外,我可能会运行Apache 2 + Passenger来为我的rails前端和API服务提供服务,使用像Rack :: URLMap(或虚拟主机,如果使用子域)来将请求定向到正确的应用程序.我是否应该在生产环境中使用Passenger来运行我的服务?

这是正确的方式吗?!它与我所阅读和学习的内容一致,并且如果需要也很容易分成几个物理服务器,但我想确定我没有遗漏一些东西.你会以不同的方式建造东西

非常感谢您的投入!

更新

我想要回答的主要问题是:

  • 所描述的体系结构是否适合使用外部API端点构建Web应用程序?
  • 在不同端口上的单个服务器上运行服务是否可以?

谢谢!

rest web-services ruby-on-rails sinatra ruby-on-rails-3

6
推荐指数
1
解决办法
1045
查看次数

使用omniauth的Sinatra应用程序在ie9中获取Rack :: Protection :: SessionHijacking

我有一个Sinatra应用程序,使用omniauth,不断得到这个错误

attack prevented by Rack::Protection::SessionHijacking
Run Code Online (Sandbox Code Playgroud)

当我尝试登录时(使用谷歌帐户).

它在其他版本的IE和chrome/firefox/safari上运行良好.

我的设置是

rack (1.4.1)
rack-force_domain (0.2.0)
rack-protection (1.2.0)

sinatra (1.3.2)
  rack (~> 1.3, >= 1.3.6)
  rack-protection (~> 1.2)
  tilt (~> 1.3, >= 1.3.3)
omniauth (1.0.3)
  hashie (~> 1.2)
  rack

omniauth-google-oauth2 (0.1.9)
  omniauth (~> 1.0)
  omniauth-oauth2
omniauth-oauth2 (1.0.0)
  oauth2 (~> 0.5.0)
  omniauth (~> 1.0)
Run Code Online (Sandbox Code Playgroud)

谁知道为什么会这样?

internet-explorer rack sinatra omniauth

6
推荐指数
1
解决办法
1853
查看次数

如何在Sinatra项目中开始使用Twitter Bootstrap和Sass?

我知道Twitter Bootstrap是用Less编写的,但也有一堆Sass版本.我很难找到最好用的以及如何设置我的Sinatra项目.

我希望我的资产在生产环境中进行预编译和指纹识别,但是在开发过程中有未压缩的资产,因此我可以更容易地调试(比如Rails资产管道).我尝试设置bootstrap-sass,但它需要Compass.但是当我得到所有的twitter bootstrap mixins时,我真的不需要罗盘.我也遇到了配置问题.

无论如何,关于我应该做什么的明确答案会有所帮助.

sass sinatra twitter-bootstrap

6
推荐指数
1
解决办法
3695
查看次数