Tag: 机架

重新加载rails中间件,而无需在开发中重新启动服务器

我有一个rails 4应用程序,中间件位于lib / some / middleware.rb,它当前通过初始化器注入堆栈,如下所示: MyApp::Application.configure.do |config| config.middleware.use ‘Some::Middleware’ end 不幸的是,每当我改变一些东西,我需要重新启动服务器。 如何在开发模式下的每个请求上重新加载它? 我已经看到类似的问题,关于在to_prepare块中使用自动加载或包装代码重新加载lib代码,但我不确定如何在这种情况下应用它。 谢谢, – FJM 更新#1 如果我尝试删除中间件然后在to_prepare块中重新添加它,我会收到错误“无法修改冻结的数组”。

在Rails中更新中间件

有没有办法在rails中修改( 不替换)中间件? 所以代替: config.middleware.delete ::Rack::Cache config.middleware.use ::Rack::Cache, :metastore => “rails:/”, :entitystore => “rails:/”, :verbose => false 我想简单地写一些像config.middleware.find!(::Rack::Cache).verbose = false 。 更新:这样做的原因是因为capybara-webkit在从黄瓜运行时打印了大量的消息 。

Sinatra机架中间件劫持’/’根url

我正在尝试在我的Rails应用程序中使用Sinatra应用程序作为中间件。 我在Rails应用程序的/lib文件夹中测试了一个基本的Sinatra应用程序, use d中间件并设置路由。 这工作得很好。 我想要做的是提取Sinatra应用程序并将其作为gem包含在内。 这样我就可以独立运行Sinatra应用程序,或者在多个Rails应用程序中使用它。 Sinatra App # myrackapp/lib/myrackapp.rb module Myrackapp class Application < Sinatra::Base set :root, File.dirname(__FILE__) get "/" do "Rack Home" end get '/rackroute' do "Hello, Rack Page" end end end Myrackapp也有一个gemspec – 没有什么有趣的,但我可以发布,如果有必要的话。 Rails App # Gemfile gem ‘myrackapp’, path: “/Users/gareth/Code/myrackapp” – # config/application.rb module Myrailsapp class Application < Rails::Application […]

如何使用Rails3的机架中间件?

嘿伙计们,我正在尝试使机架中间件NotFound与rails3一起工作,但我需要做一些更改才能返回一些json,所以我基本上定义了一个新类: class NotFound def initialize(app, msg, content_type = “text/html”) @app = app @content = msg @length = msg.size.to_s @content_type = content_type end def call(env) [404, {‘Content-Type’ => @content_type, ‘Content-Length’ => @length}, @content] end end 我将上面的这个类添加到“app / middleware / not_found.rb”并将以下行添加到我的application.rb文件中: config.middleware.use “NotFound”, {:error => “Endpoint Not Found”}.to_json, “application/json” 现在……好吧,它按照我的预期工作……总是回归 {“error”=>”Endpoint Not Found”} 现在,只有路由器出现故障,我才能使它工作? 我看到有一个insert_after方法,但是在Application.routes之后无法实现 ps:我知道我可以使用rails3路由器处理它,但这是一个实验,我只是有一些乐趣:-) 谢谢 […]

Rack app与rails app有什么区别?

我将我的rails 2.3.8应用程序上传到DreamHost并得到有关机架版本不兼容的错误。 我发了一张支持票,服务人员建议我删除config.ru。 这解决了这个问题。 但我想知道这会产生什么影响。 一个rails应用没有config.ru可以吗?

请求卡在ActiveRecord :: QueryCache中间件中

在部署我们的Rails应用程序(4.0.9,Ruby 2.1.2)之后,我们注意到我们的应用程序的请求会在一段时间后挂起,通常是1天左右。 使用gem rack_timer ,我们能够找到被困在ActiveRecord :: QueryCache中间件的请求。 Rack Timer (incoming) — ActiveRecord::QueryCache: 925626.7731189728 ms 删除后,我们的应用程序似乎恢复正常。 但是,我理解这个中间件的目的是提高性能,因此删除只是一个临时解决方案。 我们使用mysql(5.1.67)和适配器mysql2 (0.3.13) 更新:发布此问题后,服务器再次开始挂起,这次请求被卡在ActionDispatch :: Routing :: RouteSet I, [2014-10-13T23:17:03.661346 #32498] INFO — : Rack Timer (Application Action) — ActionDispatch::Routing::RouteSet: 3667661.2360477448 ms I, [2014-10-13T23:17:03.661946 #32498] INFO — : Rack Timer (Application Action) — ActionDispatch::Routing::RouteSet: 4373914.719343185 ms 你知道任何理由可能导致这种情况吗? 先感谢您。

在Rails 3中需要rack / openid的问题

我安装插件open_id_authentication并出现此错误: /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.0.0.beta/lib/active_support/dependencies.rb:167:in `require’: no such file to load — rack/openid (LoadError) 当我尝试启动rails server实际上,在我的系统中安装了rack-openid,我可以从irb加载它: irb(main):001:0> require ‘rack/openid’ => true 我尝试像使用ruby-openid一样添加hack到Gemfile,但它没有帮助: gem “ruby-openid”, :require => “openid” gem “rack-openid”, :require => “rack/openid” 我也试过了 gem “ruby-openid”, :require => “rack/openid” 但: /usr/lib/ruby/gems/1.9.1/gems/bundler-0.9.7/lib/bundler/runtime.rb:38:in `require’: no such file to load — rack/openid (LoadError) 在rails 2.3.5 app中没有这个问题,我无法理解为什么它会在Rails 3中发生。

设计current_tenant在设计登录失败后重置为’public’

我在SAAS应用程序上使用Devise进行身份validation和Apartment for multi-tenancy支持。 登录失败后,将“重定向”设计到登录页面(Users :: SessionsController Apartment::Tenant.current ,之前在TenantElevator中间件中设置的Apartment::Tenant.current的值将恢复为其默认值“public”。 这种情况正在发生,因为Devise并未实际重定向到登录页面,而是使用新的机架环境调用FailureApp(呈现登录页面)并返回其响应。 新的机架应用程序没有TenantElevator中间件,因此租户未设置在机架应用程序中。 有谁知道如何解决这个问题? 也许我可以将TenantElevator中间件添加到Failure应用程序中?

如何强制机架围绕通常的“你已经激活机架…”的bug?

这是一个常见问题,但没有一个答案似乎可以解决这个问题。 我很平常: You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this. You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this. 清除Gemlock文件什么都没做,再次运行bundle install没有做任何事情……运行bundle install –binstubs没有解决问题,因为你的app根“运行./bin/{rake|rails|etc”只是造成了更多错误。 有没有办法绕过这个看似常见的问题?

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

我知道Rack中间件filter是一个带有初始化和调用方法的Ruby类。 我知道call方法采用“env”参数。 像这样的东西: class MyFilter def initialize(app) end def call(env) end end 我的问题是:发送给“呼叫”的“env”参数究竟是什么? 这与Rails ENV环境(即开发,测试,生产)相同。 谢谢!