标签: sinatra

Thin EventMachine Sinatra vs. Rails

我一直在研究用EventMachine来处理一些工作的可能性.在Sinatra中,这似乎工作得很好,但Rails 3似乎在渲染视图之前执行所有刻度.

当我在瘦Web服务器下运行以下代码时,它的行为与预期一致.第一个请求立即返回,第二个请求正在等待3秒睡眠呼叫完成.这是预期的行为.

class EMSinatra < Sinatra::Base
  get "/" do
    EM.next_tick { sleep 3 }
    "Hello"
  end
end
Run Code Online (Sandbox Code Playgroud)

在Rails 3运行中,我正在尝试做同样的事情:(在瘦下运行)

class EmController < ApplicationController
  def index
    EM.next_tick {
      sleep(3)
    }
  end
end
Run Code Online (Sandbox Code Playgroud)

在Rails中,睡眠调用在将视图呈现给浏览器之前发生.结果是我等待3秒钟才能渲染初始页面.

有人知道为什么会这样吗?我不是在寻找评论,这是一个好的做法.我只是在试验.将小任务投入反应堆循环似乎是一件值得探讨的事情.如果我要进行一些非阻塞的http请求,为什么客户端必须等待?

ruby ruby-on-rails thin sinatra eventmachine

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

使用Sinatra开发完整的网站有什么不对吗?

我正在开发一个新网站.该网站的复杂程度将在Yelp.com的订单上.我对Ruby很新,但我决定使用它来开发后端.在这个过程中,我偶然发现了Sinatra.我真的很喜欢Sinatra中路由的简单性,并决定将它作为我开发的起点.似乎大多数地方都说Sinatra非常适合快速开发和"小型网络应用程序".Sinatra是否存在固有的扩展问题,还是因为您基本上必须从头开始构建所有内容而产生的评论?任何关于您使用Sinatra作为大型Web应用程序基础的意见的评论将不胜感激.

我不确定stackoverflow是否是提出这样的意见问题的正确位置,但它是我目前拥有的唯一资源,可以实际获得有关此类内容的反馈.

ruby sinatra web

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

在Sinatra中缓存响应的最佳方法?

我正在使用我用Sinatra制作的API来构建一个简单的应用程序,它返回一些JSON.这是相当多的JSON,我的应用程序的API依赖于对其他API的几百个请求.

我可以将结果缓存5天左右,根本没有数据问题.我只是不是100%确定如何实现缓存.我如何与Sinatra一起做这件事?

ruby caching sinatra

9
推荐指数
2
解决办法
5583
查看次数

将ORM添加到Sinatra应用程序; 是否有理想的问题和良好的表现?

我想在我现有的Sinatra应用程序中添加一个ORM.虽然我还没有尝试过ActiveRecord,但我还是通过了Datamapper,Sequel和ActiveRecord.

Datamapper似乎很容易,但我经常面临" 在一个进程中使用什么ORM多个数据库连接sinatra应用程序? "中讨论的问题,但无法理解它的解决方案和根本原因.

有没有建议选择合适的,以绩效为导向的ORM?

ruby orm datamapper sinatra

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

我可以在Sinatra中使用Thin启用SSL吗?

我在寻找一个简单的方法,以使在通过薄独立西纳特拉应用程序运行SSL,而不必通过--ssl,--ssl-key-file--ssl-cert-file在通过薄命令行参数.

是否可以直接在Sinatra应用程序中或通过config.ru文件定义它们?

我花了几个小时寻找这个问题的答案,但到目前为止还没有找到任何有效的方法.

ssl thin sinatra

9
推荐指数
2
解决办法
3868
查看次数

Sinatra和Grape API在一起?

我一直在读书,我发现这个名为Grape的微框架用于红宝石.我目前正在使用Sinatra来处理Web界面,但我还想实现Grape来处理应用程序的API方面.我找不到任何有用的建议来解决这个问题.葡萄文档说"Grape是一个类似REST的API微框架,用于Ruby.它设计用于在Rack上运行,或通过提供简单的DSL来轻松开发RESTful API,从而补充现有的Web应用程序框架,如Rails和Sinatra." 所以听起来应该有正式的两种方式相结合的方式吗?这个应用程序也将在Heroku上运行.

ruby rubygems heroku sinatra grape-api

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

Sinatra与Puma合作?

我正在尝试在我的应用程序中利用Server-Sent Events.我正在使用Sinatra和sinatra-sse宝石.这个宝石包裹着Sinatra的stream :keep_alive召唤.

在Thin上运行我的应用程序时,我绝对没有问题,我的事件流按预期工作.然而,当我切换我的应用程序与Puma一起运行时,一切正常,除了我sse_stream绝对没有!它只返回一个空白页面.

我的流设置如此

get "/logstream/:server" do
    if rbcserver = MyApp.servers[params[:server]]
        sse_stream do |stream|     
            rbcserver.add_web_logger(stream)
            stream.callback { rbcserver.remove_web_logger(stream) }
        end
    else
        error 404
    end
end
Run Code Online (Sandbox Code Playgroud)

我这样开始瘦:

@@puma_instance = Puma::Server.new MyApp::WebUI
@@puma_instance.add_tcp_listener ip, port
@@puma_instance.run
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?任何帮助,将不胜感激.

编辑:更多信息这是cURL在Puma上运行时提供的

$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver    
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked

$
Run Code Online (Sandbox Code Playgroud)

而这就是Thin上发生的事情

$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver                                        
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Connection: …
Run Code Online (Sandbox Code Playgroud)

ruby rack thin sinatra puma

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

sinatra路线中的几个可选参数

我需要Sinatra路由以下列方式运行:

GET /list/20/10  # Get 20 items with offset 10
GET /list/20     # Get 20 items with default offset
GET /list        # Get default number of items with default offset
Run Code Online (Sandbox Code Playgroud)

我明白,我可能会将值作为查询传递:

GET /list?limit=20&offset=10
Run Code Online (Sandbox Code Playgroud)

但我想按照上面的描述传递它们.我很确定有一种方法可以向Sinatra/Padrino解释我想做什么,但我现在完全陷入困境.我试过了:

get :list, :map => '/list', :with => [:limit, :offset] {} # 404 on /list
get :list, :map => '/list/*' { puts params[:splat] } # 404 on /list
get :list, :map => '/list/?:limit?/?:offset?' {} # 404 on /list
get :list, :map => '/list' { redirect url_for(:list, …) …
Run Code Online (Sandbox Code Playgroud)

ruby sinatra padrino

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

Sinatra中`redirect`和`redirect to`之间的区别

使用redirectredirect to在Sinatra 之间有什么区别?它们似乎都默认为相同的状态代码.是否to '/url'只是一些语法上的好处,使方法更具可读性?

ruby sinatra

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

Ruby Sinatra创建没有PEM和OpenSSL :: SSL :: VERIFY_NONE的发布请求

我尝试使用SSL创建POST请求,但没有OpenSSL :: SSL :: VERIFY_NONE,因为它会打开安全攻击并且没有PEM证书.但我发现问题,我发送POST请求的ruby代码:

post '/test/test1' do
  cross_origin
  post_data = request.body.read
  res_Data = JSON.parse(post_data)
  userName = res_Data['username']

  @responseFromServer=''
  uri = URI('https://test.com/test1')
  Net::HTTP.start(uri.host, uri.port,
                  :use_ssl => uri.scheme == 'https',
                  :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
    request = Net::HTTP::Post.new uri.request_uri
    request.basic_auth 'aa', 'bb'
    request.body = {'username' =>userName}.to_json
    response = http.request request
    @responseFromServer = response.body.to_s
  end
  newJson = JSON.parse(@responseFromServer)

  status_msg = newJson['status']['status_msg']
  if (status_msg == "Success")
    return 'true'
  end
    return 'false'
end
Run Code Online (Sandbox Code Playgroud)

这是方法工作,但他使用OpenSSL :: SSL :: VERIFY_NONE.如何在没有OpenSSL :: SSL :: VERIFY_NONE和PEM sertificate的情况下创建发送POST请求的方法?

编辑 …

ruby ssl sinatra

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

标签 统计

sinatra ×10

ruby ×9

thin ×3

ssl ×2

caching ×1

datamapper ×1

eventmachine ×1

grape-api ×1

heroku ×1

orm ×1

padrino ×1

puma ×1

rack ×1

ruby-on-rails ×1

rubygems ×1

web ×1