Tag: 机架

Ruby Rack Heroku:提供静态文件

我遵循Heroku指南使用Ruby Rack( https://devcenter.heroku.com/articles/static-sites-ruby )部署静态文件,但除了index.html之外,我无法访问\public任何HTML文件。 也就是说, localhost:9292/test.html仍然映射到index.html 。 (我的所有样式和js文件都正确提供)。 下面是我的config.ru文件。 我知道什么是错的,但不确定有效的解决方案? use Rack::Static, :urls => [“/images”, “/js”, “/css”], :root => “public” run lambda { |env| [ 200, { ‘Content-Type’ => ‘text/html’, ‘Cache-Control’ => ‘public, max-age=86400’ }, File.open(‘public/index.html’, File::RDONLY) ] }

如何让unicorn在路径下运行Rails 3.0应用程序?

我正在从Passenger迁移到Unicorn,而使用Passenger,我曾经使用RailsBaseURI选项运行我的Rails 3.0应用程序,例如使用’/ blah’为所有URL添加前缀。 在Unicorn下运行相同的应用程序时,我将’–path / blah’传递给unicorn_rails,但服务器仍然提供http:// server:3000 / etc / etc ,而不是http:// server:3000 / blah / etc / etc – 我看到一些资产是通过/ blah /请求的(比如JS文件,等等),但各种链接在它们之前仍然没有’/ blah /’。 所以 – 总结一下 – 如何让Unicorn在/ blah下安装我的应用程序,以便所有请求都以’/ blah’为前缀,并且所有链接和资产都是以’/ blah /’为前缀创建的? 谢谢

Rails 3.2,处理损坏的请求体(MultiJson :: DecodeError)

我正在研究Rails 3.2.11应用程序(MRI 1.9.3)。 它的PArt是一个Web服务,它接收带有JSON序列化主体的POST请求。 一切正常,但我希望它能够抵御错误的格式化请求,例如无效的JSON。 现在,如果它收到一个JSON – 比方说 – 缺少一个逗号,它将返回一个500错误,其中包含默认rails错误视图的HTML响应(加上dev中的回溯)。 我想自定义它以返回带有错误信息的JSON或XML响应。 错误是MultiJson::DecodeError ,我知道我可以在ApplicationController中使用rescue_from捕获exception……但它似乎不起作用。 这就像错误发生在正常请求流之外。 这是我的代码(一旦我开始工作,我将使用更多数据扩展错误消息): class ApplicationController “the request body was not acceptable” } respond_to do |format| format.html { redirect_to :root, notice: “invalid params” } format.xml { render :xml => @response, status: 400 } format.json { render :json => @response, status: 400 } end end […]

Sinatra测试总是404′

我有一个非常简单的Sinatra应用程序,我在测试时遇到了问题。 基本上,当我从浏览器中的测试中知道请求正常工作时,每个请求测试都会返回404。 关于问题可能是什么的任何想法? test_helper.rb中: ENV[“RACK_ENV”] = ‘test’ $: << File.expand_path(File.dirname(__FILE__) + '/../lib') require 'app' Sinatra::Synchrony.patch_tests! class Test::Unit::TestCase include Rack::Test::Methods end app_test.rb require ‘test_helper’ class AppTest < Test::Unit::TestCase def app @app ||= Sinatra::Application end def test_it_says_hello get "/" assert_equal 200, last_response.status end end app.rb $: << 'config' require "rubygems" require "bundler" ENV["RACK_ENV"] ||= "development" Bundler.require(:default, ENV["RACK_ENV"].to_sym) […]

从中间件中触发基本的HTTP身份validation

我已经为rails创建了一个自定义中间件,它将拦截所有请求并确保它来自授权的IP,否则它应该提示基本的http auth用户/名称密码。 这是目前的样子: require ‘net/http’ class AuthorizeEnvironment def initialize(app) @app = app end def call(env) if AppConstants.approved_doximity_ips.include?(env[“REMOTE_ADDR”]) @app.call(env) elsif authorized?(env) @app.call(env) else [403, {“Content-Type” => “text/html”}, [“Not Authorized on this environment.”]] end end def authorized?(env) @auth ||= Rack::Auth::Basic::Request.new(env) @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == [‘username’, ‘password’] end end 这段代码的问题是我似乎找不到在浏览器上触发http auth窗口的方法 。 我对此进行了审核,并没有看到任何明显的迹象表明这是如何完成的。 你能指点我正确的方向吗?

基于ruby的服务器的自适应映像

我想根据用户屏幕的大小向客户端发送图像,如果我有高分辨率图像,并且用户想要在移动设备上查看它我不想发送完整的高清图像,而是我想将缩小的图像发送到用户的设备尺寸,这将增加低带宽设备的加载速度 这里有一个解决方案 自适应图像可检测访问者的屏幕大小,并自动创建,缓存和提供设备适当的重新缩放版本的网页嵌入式HTML图像。它旨在与响应式设计一起使用,并与流体图像技术结合使用。 (来自给定的链接) 我看到这种基于php和apache的服务器的解决方案,是否有基于ruby服务器的Web应用程序的解决方案? gem可能是…谢谢

如何在启动时自动创建resque worker?

好的,我正在制作我的第一个ruby应用程序。 谁知道把所有东西都搬到’生产’那就太复杂了。 到目前为止,我一直在努力配置乘客,让它在启动时运行,然后在启动时运行redis。 我的最后一项任务是在启动时添加1名工作人员。 现在,我必须ssh并运行我的rake命令rake workers:start 。 显然,当我想关闭ssh时,这并不好。所以我真的不知道下一步是怎么回事。 我尝试将resque默认配置复制到config.ru,它只是炸毁乘客有错误。 我还调查了一些人提到的resque-pool,但这已经超出了我的想象。 我所要做的就是在启动时添加1个工作人员。 在这一点上,这不是一个如此简单的app应该是最好的。

Rails 3请求调度周期

我正在研究rails 3架构,以便了解调度请求的过程。 整个过程非常简单。 Application是一个机架应用程序,它最终将其调用消息委托给ActionDispatch :: Routing :: RouteSet的调用方法,该方法调度必要控制器的相应操作。 它通过键“action_dispatch.request.path_parameters”从存储在机架env中的哈希获取控制器和操作名称。 所以问题是:谁设置了这个哈希? 谁解析请求uri并确定操作和控制器名称? 我无法找到此代码。 我看到在路由配置期间,ActionDispatch :: Routing :: Mapper对象用于构造有关已定义路由的信息,并将其存储在ActionDispatch :: Routing :: RouteSet中。 但是在请求期间如何使用此信息来查找适当的操作和控制器。 机架还在某种程度上涉及到这里吗?

Heroku 301重定向

我怎么做到这一点http://domain.com 301重定向到http://www.domain.com ? 我习惯使用.htaccess来ModRewrite它,但我知道我不能在Heroku上做到这一点。 .htaccess的示例: Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 我的文件结构: – /public — /style — index.html – config.ru 我只是提供单页,我的config.ru包括: use Rack::Static, :urls => [“/style”], :root => “public” run lambda { |env| [ 200, { ‘Content-Type’ => ‘text/html’, ‘Cache-Control’ => ‘public, max-age=86400’ }, File.open(‘public/index.html’, File::RDONLY) ] }

Rack Sessions在Chrome中迷失了

我有一个非常简单的应用程序托管在EC2上使用Sinatra构建,在nginx后面提供服务。 问题是,使用Chrome,会话变量在Sinatra中“丢失”。 它不会发生在Firefox中。 这是使用Rack :: Session :: Cookie。 这与此问题类似: Sinatra不会在Chrome上使用重定向来保持会话 任何有关如何在Chrome中解决此问题的见解将不胜感激。