标签: rack

在rspec中指定内容类型

我正在尝试构建一个通过POST发送JSON(或XML)的rspec测试.但是,我似乎无法让它真正起作用:

    json = {.... data ....}.to_json
    post '/model1.json',json,{'CONTENT_TYPE'=>'application/json'}
Run Code Online (Sandbox Code Playgroud)

还有这个

    json = {.... data ....}.to_json
    post '/model1.json',json,{'Content-Type'=>'application/json'}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

ruby rack rspec sinatra

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

有没有办法从heroku提供gzip资产?

我想知道是否有任何方法可以让Rails网络服务器(瘦)服务于资产管道创建的*.gz文件.据我所知,那些压缩级别比压缩级别更高Rack::Deflater,只能serve_static_assets在rackup文件中使用,而不能在config.middleware.

一个不太理想的解决方案可能是更改默认压缩级别,Zlib即哪些Rack::Deflater引用.它应该只需要gzip一次,然后它去Rack::Cache,然后希望是CDN.

第二个不太理想的解决方案可能是a Rack::Rewrite.

gzip rack ruby-on-rails heroku asset-pipeline

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

如何读取机架请求中的POST数据

当我运行curl命令时

curl -v -H "Content-type: application/json" -X POST -d '{"name":"abc", "id":"12", "subject":"my subject"}' http://localhost:9292
Run Code Online (Sandbox Code Playgroud)

要将带有数据的POST请求发送到我的Rack应用程序,我的代码打印出来{}.这来自puts req.POST()下面的代码.

为什么打印出来{}而不是POST数据?如何在Rack应用程序中正确访问POST数据?

require 'json'

class Greeter
  def call(env)
    req = Rack::Request.new(env)
    if req.post?
      puts req.POST()
    end
    [200, {"Content-Type" => "application/json"}, [{x:"Hello World!"}.to_json]]
  end
end

run Greeter.new
Run Code Online (Sandbox Code Playgroud)

ruby rack

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

Rack中间件中的"env"变量是什么?

我知道Rack中间件过滤器是一个带有初始化和调用方法的Ruby类.我知道call方法采用"env"参数.像这样的东西:

class MyFilter
  def initialize(app)
  end

  def call(env)
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:"env"参数究竟发送给"call"的是什么?这与Rails ENV环境(即开发,测试,生产)相同.

谢谢!

rack middleware ruby-on-rails

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

机架错误"Rack :: Lint :: LintError:响应主体必须响应每个"

我正在浏览tekpub机架教程但是当我尝试在机架中运行一个基本程序时我得到了这个错误.

ERROR Rack::Lint::LintError: Response body must respond to each
/Users/adam/.rvm/gems/ruby-1.9.3-preview1/gems/rack-1.3.4/lib/rack/lint.rb:19:in     `assert'
/Users/adam/.rvm/gems/ruby-1.9.3-preview1/gems/rack-1.3.4/lib/rack/lint.rb:513:in `each'
/Users/adam/.rvm/gems/ruby-1.9.3-preview1/gems/rack-1.3.4/lib/rack/body_proxy.rb:23:in `method_missing'
/Users/adam/.rvm/gems/ruby-1.9.3-preview1/gems/rack-1.3.4/lib/rack/chunked.rb:23:in `each'
/Users/adam/.rvm/gems/ruby-1.9.3-preview1/gems/rack-1.3.4/lib/rack/handler/webrick.rb:71:in `service'
/Users/adam/.rvm/rubies/ruby-1.9.3-preview1/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/Users/adam/.rvm/rubies/ruby-1.9.3-preview1/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/Users/adam/.rvm/rubies/ruby-1.9.3-preview1/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Run Code Online (Sandbox Code Playgroud)

这是我试图运行的程序:

class EnvironmentOutput

  def call(env)
     ["200",{"Content-Type" => "text/plain"}, "Hello World"]
  end

end

run EnvironmentOutput.new
Run Code Online (Sandbox Code Playgroud)

我是初学程序员,所以我不确定它是怎么回事.尝试谷歌搜索但没有任何结果.

使用ruby 1.9.3 Rack 1.1

谢谢

ruby rack ruby-on-rails

20
推荐指数
2
解决办法
8267
查看次数

将参数传递给新的sinatra app

简单的问题:我希望能够在config.ru中将选项传递到我的sinatra应用程序中.怎么可能?我的config.ru看起来像这样:

run MyApp
Run Code Online (Sandbox Code Playgroud)

但我想在我的MyApp类中使用它来获取参数:

class MyApp < Sinatra::Base
  def initialize(config)
    @config = config
  end
end
Run Code Online (Sandbox Code Playgroud)

但我无法想办法做到这一点.想法?

ruby rack sinatra

20
推荐指数
2
解决办法
6419
查看次数

"在升级到Rails 4之后,没有这样的中间件可以插入:Rack :: Lock(RuntimeError)"

升级到Rails 4后,我收到以下错误:

.../ruby-1.9.3-p125/gems/actionpack-4.0.0.rc2/lib/action_dispatch/middleware/stack.rb:125:in 'assert_index': No such middleware to insert before: Rack::Lock (RuntimeError)

违规行是我的" 删除斜线 "机架重写规则:

config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{^/(.*)/$}, '/$1', :headers => {'Cache-Control' => 'public, max-age='+2.week.to_s}
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

rack ruby-on-rails ruby-on-rails-4

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

Ruby Rack - 安装一个简单的Web服务器,默认读取index.html

我正在尝试从本教程中获取一些信息:http://m.onkey.org/2008/11/18/ruby-on-rack-2-rack-builder

基本上我想要一个config.ru告诉机架读取当前目录的文件,这样我就可以像一个简单的apache服务器一样访问所有文件,并且还可以使用index.html文件读取默认的根...有什么方法可以做到这一点?

我目前config.ru看起来像这样:

run Rack::Directory.new('')
#this would read the directory but it doesn't set the root to index.html


map '/' do
  file = File.read('index.html')
  run Proc.new {|env| [200, {'Content-Type' => 'text/html'}, file] }
end
#using this reads the index.html mapped as the root but ignores the other files in the directory
Run Code Online (Sandbox Code Playgroud)

所以我不知道怎么从这里开始......

我也按照教程示例尝试了这个但是thin没有正确启动.

builder = Rack::Builder.new do

  run Rack::Directory.new('')

  map '/' do
    file = File.read('index.html')
    run Proc.new {|env| [200, {'Content-Type' => …
Run Code Online (Sandbox Code Playgroud)

ruby indexing webserver rack config

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

为什么机架响应体不是字符串?

他们的文档中的经典hello world示例,

class HelloWorld
  def call(env)
    return [200, {}, ["Hello world!"]]
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第三个值是[Hello world!"],而不是"Hello world"?来自他们的文档,

Body必须响应每个,并且只能产生String值.Body本身不应该是String的实例,因为这将在Ruby 1.9中破坏.

为什么身体需要对每个人做出反应?在什么情况下重要?

ruby rack

19
推荐指数
2
解决办法
3679
查看次数

Rack/Rails中的HTTP/2支持

HTTP/2由所有主流浏览器发布和支持.在Apachenginx等主要Web服务器中都有实现.

但对于我们Rubyist来说,目前的选择非常有限.曾几何时(2014年12月),Aaron Patterson正在探索在Rack 2.0中支持HTTP/2的想法,但这还没有实现.他还发布了一些有关PumaWEBrick的可能性.这就是我所能找到的.

我的问题是,广泛地说:如果我对在Rails应用程序中使用HTTP/2感兴趣,那么存在哪些选项,它们包含哪些HTTP/2功能,并且它们中的任何一个都可以用于生产吗?

rack ruby-on-rails http2

19
推荐指数
2
解决办法
5813
查看次数