我正在尝试构建一个通过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)
有任何想法吗?谢谢!
我想知道是否有任何方法可以让Rails网络服务器(瘦)服务于资产管道创建的*.gz文件.据我所知,那些压缩级别比压缩级别更高Rack::Deflater,只能serve_static_assets在rackup文件中使用,而不能在config.middleware.
一个不太理想的解决方案可能是更改默认压缩级别,Zlib即哪些Rack::Deflater引用.它应该只需要gzip一次,然后它去Rack::Cache,然后希望是CDN.
第二个不太理想的解决方案可能是a Rack::Rewrite.
当我运行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) 我知道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环境(即开发,测试,生产)相同.
谢谢!
我正在浏览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
谢谢
简单的问题:我希望能够在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)
但我无法想办法做到这一点.想法?
升级到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)
有任何想法吗?
我正在尝试从本教程中获取一些信息: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) 他们的文档中的经典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中破坏.
为什么身体需要对每个人做出反应?在什么情况下重要?