标签: sinatra

单独的REST JSON API服务器和客户端?

我即将从头开始创建一堆Web应用程序.(请参阅http://50pop.com/code获取概述.)我希望能够从许多不同的客户端访问它们:前端网站,智能手机应用程序,后端网络服务等.所以我真的想要一个每个JSON REST API.

此外,我更喜欢在后端工作,所以我梦想着我完全专注于API,并雇用其他人来制作前端用户界面,无论是网站,iPhone,Android还是其他应用.

请帮我决定采取哪种方法:

一起在铁路上

制作一个非常标准的Rails网络应用程序.在控制器中,执行respond_with开关,以提供JSON或HTML.然后JSON响应是我的API.

亲:很多先例.伟大的标准和许多以这种方式做事的例子.

Con:不一定要API与Web应用程序相同.不喜欢if/then respond_with切换方法.混合两个非常不同的东西(UI + API).

REST SERVER + JAVASCRIPT-HEAVY CLIENT

制作仅限JSON的REST API服务器.使用Backbone或Ember.js直接访问客户端JavaScript,在浏览器中显示模板.

亲:我喜欢API和客户端的分离.聪明的人说这是要走的路.理论上很棒.似乎前沿和令人兴奋.

骗局:没有多少先例.这方面的例子并不多.公共示例(twitter.com)感觉迟钝,甚至转向远离这种方法.

REST服务器+服务器端HTML客户端

制作仅限JSON的REST API服务器.创建一个基本的HTML网站客户端,仅访问REST API.减少客户端JavaScript.

亲:我喜欢API和客户端的分离.但是提供纯HTML5非常简单,而且不是客户密集型的.

骗局:没有多少先例.这方面的例子并不多.框架也不支持这一点.不知道如何处理它.

特别是从经验中寻求建议,而不仅仅是在理论上.

rest sinatra backbone.js ruby-on-rails-3 ember.js

371
推荐指数
8
解决办法
7万
查看次数

通过多个文件将Sinatra用于大型项目

似乎在Sinatra中所有路由处理程序都被写入一个文件中,如果我理解它是一个大/小控制器.有没有办法将它拆分成单独的独立文件,所以当让我们说某人调用"/"时 - 执行一个动作,如果接收到像"/ posts/2"这样的smth,那么另一个动作 - 在PHP中应用的类似逻辑?

ruby sinatra

182
推荐指数
5
解决办法
5万
查看次数

使用Sinatra提供静态文件

我有一个页面网站只使用HTML,CSS和JavaScript.我想将应用程序部署到Heroku,但我找不到办法.我现在正试图让应用程序与Sinatra一起工作.

.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb
Run Code Online (Sandbox Code Playgroud)

以下是内容myapp.rb.

require 'rubygems'
require 'sinatra'

get "/" do
  # What should I write here to point to the `index.html`
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

138
推荐指数
6
解决办法
8万
查看次数

如何让Sinatra在每次更改后自动重新加载文件?

我在用

# my_app.rb
load 'index.rb'
Run Code Online (Sandbox Code Playgroud)

并像这样启动服务器

ruby my_app.rb
Run Code Online (Sandbox Code Playgroud)

但它永远不会重新加载我在索引页面中所做的任何更改.
我在这里错过了吗?

ruby sinatra

115
推荐指数
6
解决办法
4万
查看次数

为什么这个RMagick调用会产生分段错误?

我一直在撞墙,试着弄清楚这里出了什么问题,我肯定(或者更希望)这是一个相当明显的东西,我忽略了.我使用的是Ruby 1.9.1,Sinatra 1.0和RMagick 2.13.1.ImageMagick和RMagick已正确安装并正常运行 - 我已成功操作并保存了来自irb的图像.

params数组的相关部分(为便于阅读而格式化更改):

{"admin_user_new_image_file"=>
    {
        :filename=>"freddie-on-shetland-pony.png",
        :type=>"image/png", 
        :name=>"admin_user_new_image_file", 
        :tempfile=>#<File:/var/folders/a7/a7pO5jMcGLCww9XBGRvWfE+++TI/-Tmp-/RackMultipart20100514-20700-o2tkqu-0>,
        :head=>"Content-Disposition: form-data; name=\"admin_user_new_image_file\"; filename=\"freddie-on-shetland-pony.png\"\r\nContent-Type: image/png\r\n"
    }
}
Run Code Online (Sandbox Code Playgroud)

相关代码:

post "/admin/user/:account_name/image/new/" do
  if params[:admin_user_new_image_file][:tempfile]
    thumbnail = Magick::Image.read("png:"+params[:admin_user_new_image_file][:tempfile].path).first
  end
end
Run Code Online (Sandbox Code Playgroud)

错误(第229行是以"thumbnail ="开头的行:

config.ru:229: [BUG] Segmentation fault
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.3.0]

-- control frame ----------
c:0042 p:---- s:0196 b:0196 l:000195 d:000195 CFUNC  :read
c:0041 p:0121 s:0192 b:0192 l:001ab8 d:000191 LAMBDA config.ru:229
c:0040 p:---- s:0189 b:0189 l:000188 d:000188 FINISH
c:0039 p:---- s:0187 b:0187 l:000186 d:000186 CFUNC  :call
c:0038 p:0018 …
Run Code Online (Sandbox Code Playgroud)

ruby rmagick segmentation-fault sinatra ruby-1.9.1

69
推荐指数
5
解决办法
1万
查看次数

Sinatra vs. Rails

我已经完成了一些Sinatra和Rails样本,但我很难搞清楚哪些功能属于哪种技术.

使用Sinatra/Rails可以获得什么?它只是ActionPack/ActionView吗?如果我错了,请纠正我,但我可以使用Webrick/Mongrel并提供我的.erb文件吗?我可以在这些文件中使用ActiveRecord技术,仍然可以访问帖子变量,会话状态和查询字符串变量吗?

所以,我问你们的是,如果我从上面的类似PHP的场景开始; Webrick + ERB + ActiveRecord,使用Sinatra可以获得什么?通过使用Rails我还能获得什么?

ruby ruby-on-rails sinatra

66
推荐指数
2
解决办法
2万
查看次数

通过Nginx发送EventSource/Server-Sent事件

在服务器端使用带有stream块的Sinatra .

get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    out.callback { connections.delete(out) }
  end
end
Run Code Online (Sandbox Code Playgroud)

在客户端:

var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
Run Code Online (Sandbox Code Playgroud)

当我直接使用应用程序,通过http://localhost:9292/,一切都很完美.连接是持久的,所有消息都传递给所有客户端.

但是当它通过Nginx时http://chat.dev,连接被丢弃并且重新连接每隔一秒左右触发一次.

Nginx设置对我来说没问题:

upstream chat_dev_upstream {
  server 127.0.0.1:9292;
}

server {
  listen       80;
  server_name  chat.dev;

  location / {
    proxy_pass http://chat_dev_upstream;
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header Host $host;
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试keepalive 1024upstream部分以及proxy_set_header Connection keep-alive;在 …

ruby nginx sinatra

66
推荐指数
4
解决办法
2万
查看次数

Sinatra - API - 身份验证

我们将在Sinatra开发一个小API应用程序.有哪些身份验证选项可用于保护API调用?

authentication api sinatra

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

在开发和生产中使用不同的Procfile

我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它.

我在开发中使用foreman和shotgun,使用以下Procfile:

web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
Run Code Online (Sandbox Code Playgroud)

它适用于开发和生产.但事实是,我不想在生产中使用霰弹枪,因为它太慢了.

我们可以为dev和prod使用单独的Procfile配置吗?

rack heroku sinatra shotgun foreman

58
推荐指数
2
解决办法
2万
查看次数

登录Sinatra?

我无法弄清楚如何使用Sinatra记录消息.我不打算记录请求,而是在我的应用程序中的某些点上自定义消息.例如,在获取我想要记录的URL时"Fetching #{url}".

这是我想要的:

  • 指定日志级别的能力(例如:logger.info("Fetching #{url}"))
  • 在开发和测试环境中,消息将写入控制台.
  • 在生产中,只写出与当前日志级别匹配的消息.

我猜这可以很容易地在做config.ru,但我不是100%肯定,我想启用该设置,如果我必须手动创建一个Logger对象本人(以及此外,该级Logger使用方法:Logger,Rack::Logger,或Rack::CommonLogger) .

(我知道在StackOverflow上有类似的问题,但似乎都没有直接回答我的问题.如果你能指出我现有的问题,我会把这个问题标记为副本).

ruby logging rack sinatra

53
推荐指数
3
解决办法
5万
查看次数