标签: sinatra

Sinatra,JavaScript跨域请求JSON

我在Sinatra上运行REST-API构建.现在我想编写一个从API中获取数据的jQuery脚本.

Sinatra被告知要回应JSON

before do
  content_type :json
end
Run Code Online (Sandbox Code Playgroud)

简单的路线看起来像

get '/posts' do
  Post.find.to_json
end
Run Code Online (Sandbox Code Playgroud)

我的jQuery脚本是一个简单的ajax调用

$.ajax({
  type: 'get',
  url: 'http://api.com/posts',
  dataType: 'json',
  success: function(data) {
     // do something
  }
})
Run Code Online (Sandbox Code Playgroud)

实际上只要两者都在相同的IP,API和请求JS上运行,一切正常.不过,我已经尝试过使用JSONP for Rack而没有任何积极的结果.可能我只需要提示如何继续.

jquery json rack cross-domain sinatra

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

将哈希列表转换为方法的参数

我有基于哈希的参数.

method1(:test=>[:arg1, :arg2 => :something])
Run Code Online (Sandbox Code Playgroud)

我需要以:test下面的格式将参数作为参数传递给另一个方法

来自A:

[:arg1, {:arg2=>:something}] 
Run Code Online (Sandbox Code Playgroud)

到B:

method2 :arg1, :arg2=>:something
Run Code Online (Sandbox Code Playgroud)

我如何从A到B?

ruby arrays hash ruby-on-rails sinatra

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

尝试包含自定义模块时加载错误

相同的应用程序,不同的问 我正在使用Dan Benjamin"Meet Sinatra"截屏视频作为参考.我正在尝试包含一个自定义身份验证模块,它位于lib文件夹(lib/authentication.rb)中.我要求代码顶部的那行,但是当我尝试加载页面时,它声称没有这样的文件要加载.

有什么想法吗?

这是我的主要Sinatra文件的顶部:

require 'sinatra'
require 'rubygems'
require 'datamapper'
require 'dm-core'
require 'lib/authorization'

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/entries.db")

class Entry
include DataMapper::Resource

property :id,           Serial
property :first_name,   String
property :last_name,    String
property :email,        String
property :created_at,   DateTime    

end

# create, upgrade, or migrate tables automatically
DataMapper.auto_upgrade!

helpers do
include Sinatra::Authorization
end
Run Code Online (Sandbox Code Playgroud)

而实际的模块:

module Sinatra
  module Authorization

  def auth
    @auth ||= Rack::Auth::Basic::Request.new(request.env)
  end

  def unauthorized!(realm="Short URL Generator")
    headers 'WWW-Authenticate' => %(Basic realm="#{realm}")
    throw :halt, [ 401, 'Authorization Required' ]
  end

  def …
Run Code Online (Sandbox Code Playgroud)

ruby basic-authentication sinatra

1
推荐指数
2
解决办法
3706
查看次数

`execute_non_query':无法添加默认值为NULL的NOT NULL列(DataObjects :: SyntaxError)

class User

    include DataMapper::Resource

    property :id,              Serial
    property :name,            String
    property :email,           String

    has n, :records

end


class Project
    include DataMapper::Resource

    property :id,          Serial
    property :name,        String

    has n, :records ?????

end
#
class Record

   # SPEND_REGEX = /^[0-9]{1}:[0-5]{1}[0-9]{1}$/

    include DataMapper::Resource


    property :id,                Serial
    property :reporting_type,    String
    property :spend_time,        String

    belongs_to :user
    belongs_to :project ????


end

  DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)

用??? 我标记了抛出错误的关系"`execute_non_query':无法添加带有默认值NULL的NOT NULL列(DataObjects :: SyntaxError)"如何定义2与datamapper中的一个模型有很多关系?

datamapper sinatra relationships

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

Sinatra + omniauth + Android,寻求建议

我正在开发一个Sinatra应用程序,我想使用OmniAuth.到目前为止,我对Web应用程序有类似的东西:

http://codebiff.com/omniauth-with-sinatra

我希望网络应用程序可以通过Android手机使用,它将使用API​​,通过令牌进行身份验证.这里似乎很好地介绍了API的开发:

Sinatra - API - 身份验证

目前尚不清楚的是我可能会安排登录程序.据推测,它将沿着这些方向:

  1. 用户通过Android设备上的应用内按钮选择要使用的服务,例如Twitter,FaceBook&c.
  2. Android应用程序打开webview以登录Web应用程序.
  3. 以某种方式创建令牌,将其存储在Web应用程序的数据库中,并返回到Android应用程序,以便可以将其存储并用于后续API请求.

关于如何管理第3点,我不是很清楚 - 有没有人有任何建议?

android sinatra omniauth

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

sinatra javascript调用

在rails中,可以设置:remote => true对Web应用程序进行远程调用。然后,人们可以.js.erb对变更元素做出回应。我将如何在Sinatra中创建它?我想对资源进行远程删除,如果成功,请更新Dom,否则抛出错误。

javascript ruby ruby-on-rails sinatra ruby-on-rails-3

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

无法通过乘客/阿帕奇为我的sinatra应用程序提供服务

我有一个Sinatra应用程序,我在dev/stage中使用Thin运行,现在是时候进入生产了我开始检查如何在apache中与乘客一起服务.

我主要是跟着

http://recipes.sinatrarb.com/p/deployment/apache_with_passenger http://www.rabblemedia.net/blog/installing-rvm-ruby-on-rails-and-passenger-on-centos-6/ http:/ /sergiy.kyrylkov.name/2012/02/26/phusion-passenger-with-apache-on-rhel-6-centos-6-sl-6-with-selinux/

我的本地盒子正在运行fedora 16,apache 2.2,ruby 1.9+

我安装了乘客

gem install passenger
Run Code Online (Sandbox Code Playgroud)

然后

passenger-install-apache2-module
Run Code Online (Sandbox Code Playgroud)

几乎按照指示,如添加乘客模块

#mod_rails passenger
LoadModule passenger_module /home/orlybg/.gem/ruby/1.9.1/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
PassengerRoot /home/orlybg/.gem/ruby/1.9.1/gems/passenger-4.0.5
PassengerDefaultRuby /usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

这是我的vhost:

<VirtualHost *:80>
DocumentRoot "/var/www/html/billomatic"
ServerName billomatic
RailsEnv development

<Directory "/var/www/html/billomatic">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

LogLevel debug
ErrorLog "/var/log/httpd/billomatic-error_log"
CustomLog "/var/log/httpd/billomatic-access_log" common
Run Code Online (Sandbox Code Playgroud)

和我的config.ru

require 'rubygems'
require 'sinatra'
set :environment, ENV['RACK_ENV'].to_sym
disable :run, :reload
require File.join(File.dirname(__FILE__), 'bill-o-matic.rb')
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

我打的时候

http://billomatic/ 
Run Code Online (Sandbox Code Playgroud)

我得到Fedora页面的默认apache,首先是抱怨的错误日志

==> billomatic_error.log <==
[Wed Jun …
Run Code Online (Sandbox Code Playgroud)

ruby apache passenger mod-rails sinatra

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

在机架图中运行多个控制器

在模块化Sinatra应用程序中,config.ru文件中包含以下代码:

# ...
map '/' do
  run MyApp::Controller::WelcomesController
  run MyApp::Controller::Authenticated::Foo::HomesController
  run MyApp::Controller::Authenticated::Foo::SearchesController
end
# ...
Run Code Online (Sandbox Code Playgroud)

以及控制器文件,例如Homes controller

# app/controllers/authenticated/foo/homes_controller.rb
require_relative 'base'
module MyApp
  module Controller
    module Authenticated
      module Foo
        class HomesController < Foo::Base
          get '/Users/Foos' do
            haml 'authenticated/foo/homes/show'.to_sym
          end
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

搜索控制器

# app/controllers/authenticated/foo/searches_controller.rb
require_relative 'base'
module MyApp
  module Controller
    module Authenticated
      module Foo
        class SearchesController < Student::Base
          get '/Users/Foos/Searches' do
            haml 'authenticated/foo/searches/index'.to_sym
          end

          get '/Users/Foos/Searches/:id' do
            haml 'authenticated/foo/searches/show'.to_sym
          end
        end
      end …
Run Code Online (Sandbox Code Playgroud)

ruby rack sinatra

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

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

我想用Sinatra创建一个简单的实验性MVC框架.

我想按名称定义资源"pages",例如应该解决:

/pages (index)
/pages/new
/pages/:id/show (show)
Run Code Online (Sandbox Code Playgroud)

如同映射到app/controllers/PagesController.rb对应get('/')负责索引,post('/pages/create')负责创建等.

在阅读官方文档之后,我甚至感到非常困惑.我想我需要使用非经典的Sinatra模型,但有人能指出我正确的方向吗?

谢谢

ruby model-view-controller routing sinatra

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

读取红宝石后变量的内容更改

我是ruby的新手(昨天开始),我正在与sinatra一起玩以构建API。我遇到了一个使我毫无头绪的问题:

post '/login' do
    if request.body.read.length == 0
       halt 400 # bad request 
    else
        body = JSON.parse(request.body.read)
    end
end
Run Code Online (Sandbox Code Playgroud)

执行此代码时,出现错误,因为尝试使用解析空字符串body = JSON.parse(request.body.read)。实际上,我必须保存request.body.read另一个变量才能使用两次(或多次),因为它就像request.body在第一次使用后被“消耗掉”。

这让我想起了锈蚀的借口,但是在这里我没想到,也无法在Google上表达它来查找任何文档。谁能解释我发生了什么,为什么request.body只有一次可读?

对于有相同问题(我们永远不知道)的人,这里的解决方法是:

post '/login' do
    body = request.body.read

    if body.length == 0
        halt 400 # bad request
    else
        body_json = JSON.parse(body)
    end
end
Run Code Online (Sandbox Code Playgroud)

我听说过IO对象,但是我仍然无法进一步研究。

ruby sinatra

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