我正在Sinatra创建一个小应用程序,我想从他们的邮政编码(他们会输入),他们与其他用户之间的距离(通过邮政编码)确定用户的城市,并且可能是热量拉链的地图.
我该怎么做?我已经尝试了geoip gem,但它似乎没有做我想要的.我会使用像谷歌地图这样的外部服务(显然我需要这个用于热图)吗?
谢谢你的帮助.
所以我试图想出一种方法来为一个Sinatra应用程序在rspec中存储一个控制器方法.其主要原因是测试应用程序的逻辑流程,并确保在满足某些条件时调用必要的函数.所以,从本质上讲,我希望能够做类似的事情
controller.should_receive(:fancy_method).and_return("This is a string")
Run Code Online (Sandbox Code Playgroud)
我遇到的困难是访问sinatra应用程序中的控制器实例.我能够使用sinatra控制器类上的class_eval覆盖当前函数,但我想断言这些函数实际运行.
有人有什么建议吗?
谢谢.
我最近更新到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应用程序运行良好的设置,并已将文档根设置为子公共目录.任何想法如何解决这一问题?谢谢!
我正在尝试使用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) 这是我的 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) 我在我的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?或者是其他东西?如果需要的话,我可以提供更多的代码,但除了基本框架之外,我刚刚开始这个项目.
当我通过HTTPS访问时,我需要测试页面上某些元素的行为 - 我想知道如何使用HTTPS在本地测试这个sinatra应用程序.如果我的问题甚至没有意义,我很抱歉,但我想通过HTTPS通过我的网络浏览器连接到localhost.
我刚刚阅读了Paul Dix的着作"面向服务的设计与RoR",我想根据我刚刚学到的内容创建一个Rails 3 Web应用程序.
我认为我的基本架构是正确的,但是一个简单的问题就是阻止我:我应该如何在同一台服务器上托管多个REST服务?
这就是我现在看到的事情:
http://www.myapp.com.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来运行我的服务?
这是正确的方式吗?!它与我所阅读和学习的内容一致,并且如果需要也很容易分成几个物理服务器,但我想确定我没有遗漏一些东西.你会以不同的方式建造东西
非常感谢您的投入!
更新
我想要回答的主要问题是:
谢谢!
我有一个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)
谁知道为什么会这样?
我知道Twitter Bootstrap是用Less编写的,但也有一堆Sass版本.我很难找到最好用的以及如何设置我的Sinatra项目.
我希望我的资产在生产环境中进行预编译和指纹识别,但是在开发过程中有未压缩的资产,因此我可以更容易地调试(比如Rails资产管道).我尝试设置bootstrap-sass,但它需要Compass.但是当我得到所有的twitter bootstrap mixins时,我真的不需要罗盘.我也遇到了配置问题.
无论如何,关于我应该做什么的明确答案会有所帮助.