Tag: rack

为什么到处都有冻结常数?

我们可以从许多着名的存储库中轻松找到这种风格,如机架,导轨等。 例如在机架中 : PATH_INFO = ‘PATH_INFO’.freeze REQUEST_METHOD = ‘REQUEST_METHOD’.freeze SCRIPT_NAME = ‘SCRIPT_NAME’.freeze QUERY_STRING = ‘QUERY_STRING’.freeze CACHE_CONTROL = ‘Cache-Control’.freeze CONTENT_LENGTH = ‘Content-Length’.freeze CONTENT_TYPE = ‘Content-Type’.freeze rails中的另一个问题 : HTTP_IF_MODIFIED_SINCE = ‘HTTP_IF_MODIFIED_SINCE’.freeze HTTP_IF_NONE_MATCH = ‘HTTP_IF_NONE_MATCH’.freeze HTTP_IF_NONE_MATCH = ‘HTTP_IF_NONE_MATCH’.freeze 我想知道为什么这些常量字符串被冻结。 由于它们都是常量,因此应该只有一个实例。 当然,我们可以将”foo”.freeze放在某个地方来引用相同的单例实例,但是人们通常会编写像HTTP_IF_MODIFIED_SINCE这样的文字变量名。 所以在我看来,尽管使用了#freeze ,它没有任何区别,那么为什么人们会冻结常量呢?

Rails 3,HTTP扩展(WebDAV)和Rack App安装

1以下更多内容是指代代码开发了一个可以被认为是缺陷的rails的问题。 2我也问过一些了解得更好的人的一些观点。 我想通过Warden身份validation将WebDAV添加到我的Rails 3应用程序中。 我的warden中间件是通过Devise注入的。 http://github.com/chrisroberts/dav4rack http://github.com/hassox/warden http://github.com/plataformatec/devise 我无法从rails app(routes)中挂载DAV4Rack处理程序,如下所示: # in config/routes.rb mount DAV4Rack::Handler.new( :root => Rails.root.to_s, # ‘/webdav’, :resource_class => Dav::DocumentResource # “/webdav” 因为railsvalidationHTTP谓词(GET POST PUT ..),而webdav使用像PROPFIND这样的HTTP扩展不能validation,抛出以下exception: ActionController::UnknownHttpMethod (PROPFIND, accepted HTTP methods are get, head, put, post, delete, and options) 此validation发生在ActionDispatch中: /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0/lib/action_dispatch/http/request.rb +56 +72 in (56) “def request_method” and (72) “def method” 来自ActionDispatch的示例代码,用于执行validation,以明确说明: […]

Herit,Heroku:预收到钩子拒绝了

我正在设置git存储库并尝试将其链接到Heroku。 当我运行命令 git push heroku master 我收到 Counting objects: 7, done. Delta compression using up to 2 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 714 bytes, done. Total 7 (delta 1), reused 0 (delta 0) —–> Heroku receiving push ! Heroku push rejected due to an unrecognized error. ! We’ve been notified, […]

在同一脚本中启动并调用Ruby HTTP服务器

我想知道如何启动Ruby Rack应用程序(例如Sinatra)并在同一脚本中使用Net :: HTTP或类似方法调用它。 我可以做点什么…… require ‘sinatra/base’ require ‘net/http’ t = Thread.new do class App ‘localhost’, :port => 1234 end sleep 2 puts Net::HTTP.start(‘localhost’, 1234) { |http| http.get(‘/’) }.body t.join puts ‘Bye!’ …但是,等待Thin启动时,睡眠两秒钟并不是最佳选择。 我需要的是当服务器启动时或某人有任何其他建议时的某种回调?

使用Sinatra更改HTTP状态消息

我正在编写一个简单的Sinatra应用程序,并且如果用户发布了具有特定数据的请求,我想返回错误“453”(自定义错误代码)和消息CLIENT_ERROR,或类似的东西。 问题是:查看Sinatra文档并进行一些测试我找不到设置响应错误消息的方法,只有响应状态。 所以,如果设置了Sinatra的响应 get ‘/’ do response.status = 453 end 我得到错误代码: curl -v localhost:4567 * About to connect() to localhost port 4567 (#0) * Trying 127.0.0.1… connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:4567 > Accept: */* > < HTTP/1.1 453 < X-Frame-Options: sameorigin < X-XSS-Protection: […]

如何使用Rack接收JSON对象

我有一个非常简单的Ruby Rack服务器,如: app = Proc.new do |env| req = Rack::Request.new(env).params p req.inspect [200, { ‘Content-Type’ => ‘text/plain’ }, [‘Some body’]] end Rack::Handler::Thin.run(app, :Port => 4001, :threaded => true) 每当我使用JSON对象向服务器发送POST HTTP请求时: { “session”: { “accountId”: String, “callId”: String, “from”: Object, “headers”: Object, “id”: String, “initialText”: String, “parameters”: Object, “timestamp”: String, “to”: Object, “userType”: String } } […]

mongoid查询缓存

Rails的ActiveRecord有一个名为Query Caching(ActiveRecord :: QueryCache)的function,可以保存请求生命周期的SQL查询结果。 虽然我不太熟悉实现的内部,但我认为它将查询结果保存在Rack env中,在请求结束时将其丢弃。 遗憾的是,Mongoid目前还没有提供这样的function,而且有些查询是隐式发生的(引用),这更加恶化了。 我正在考虑实现这个function,我很好奇,Mongoid(或者,也许是mongo驱动程序?)的位置和方式应该被挂钩以实现它。

没有提供Instance_eval块?

有人知道是什么导致了这个错误吗? 我正在尝试制作基本的机架应用程序。 App.rb => class Cherry class < “text/plain”}, “Hello World”] end end end Config.ru => require ‘app’ run Cherry.app do print_start_message end 编辑:显然我忘了包含错误woops: /local/www/cherry/lib/app.rb:12:in ‘instance_eval’: block not supplied (ArgumentError)

如何使用Ruby和ERB(而不是Rails)的视图和布局?

如何使用Ruby和ERB(而不是Rails)的视图和布局? 今天我正在使用此代码来呈现我的视图: def render(template_path, context = self) template = File.read(template_path) ERB.new(template).result(context.get_binding) end 这非常有效,但是如何实现相同的function,但是在布局中渲染模板? 我想调用render_with_layout(template_path,context = self),以便它具有默认布局。

在Sinatra中使用Rack :: CommonLogger

我有一个与Sinatra一起编写的小型Web服务器。 我希望能够将消息记录到日志文件中。 我通过http://www.sinatrarb.com/api/index.html和www.sinatrarb.com/intro.html阅读,我看到Rack有一个名为Rack :: CommonLogger的东西,但我找不到如何访问和用于记录消息的任何示例。 我的应用程序很简单所以我把它写成顶级DSL,但我可以切换到从SinatraBaseinheritance它,如果这是所需要的一部分。