我在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而没有任何积极的结果.可能我只需要提示如何继续.
我有基于哈希的参数.
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?
相同的应用程序,不同的问 我正在使用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) 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中的一个模型有很多关系?
我正在开发一个Sinatra应用程序,我想使用OmniAuth.到目前为止,我对Web应用程序有类似的东西:
http://codebiff.com/omniauth-with-sinatra
我希望网络应用程序可以通过Android手机使用,它将使用API,通过令牌进行身份验证.这里似乎很好地介绍了API的开发:
目前尚不清楚的是我可能会安排登录程序.据推测,它将沿着这些方向:
关于如何管理第3点,我不是很清楚 - 有没有人有任何建议?
在rails中,可以设置:remote => true对Web应用程序进行远程调用。然后,人们可以.js.erb对变更元素做出回应。我将如何在Sinatra中创建它?我想对资源进行远程删除,如果成功,请更新Dom,否则抛出错误。
我有一个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) 在模块化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) 我想用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的新手(昨天开始),我正在与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对象,但是我仍然无法进一步研究。