标签: rack

什么是Rack中间件?

什么是Ruby中的Rack中间件?对于"中间件"的含义,我找不到任何好的解释.

ruby rack web-applications ruby-on-rails http

260
推荐指数
7
解决办法
6万
查看次数

Rails中request.remote_ip和request.ip有什么区别?

正如标题所示,您可以使用这两种方法获取客户端的IP.我想知道是否有任何差异.谢谢.

在源代码中有

"/usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.3/lib/action _dispatch/http/request.rb"257L,8741C

def ip
  @ip ||= super
end

# Originating IP address, usually set by the RemoteIp middleware.
def remote_ip
  @remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s
end
Run Code Online (Sandbox Code Playgroud)

但我真的不知道其含义.

ruby rack ruby-on-rails

68
推荐指数
3
解决办法
4万
查看次数

HTML5视频不会循环播放

我有一个视频作为网页的背景,我试图让它循环.这是代码:

<video autoplay='true' loop='true' muted='true'>
  <source src='/admin/wallpapers/linked/4ebc66e899727777b400003c' type='video/mp4'></source>
</video>
Run Code Online (Sandbox Code Playgroud)

即使我已经告诉视频循环,但事实并非如此.我也试图让它循环使用该onended属性(根据这个Mozilla支持线程,我也尝试了一点jQuery).到目前为止,没有任何工作.这是Chrome或我的代码的问题吗?

编辑:

我检查了网络事件和HEAD的工作副本(http://fhsclock-labs.heroku.com/no-violence)与我正在努力工作的应用程序.不同之处在于工作副本是从Heroku上的静态资产(通过Varnish,显然)提供视频,而我的服务来自GridFS(MongoDB).

Chrome的Inspector的"网络"标签显示,在我的应用程序中,视频会被请求三次.一次状态为"待定",第二次"取消",最后一次为200 OK.工作副本仅显示两个请求,一个是状态待定,另一个是206部分内容.但是,在视频播放一次后,该请求将更改为"已取消",并再次请求该视频.在我的应用程序中,这不会发生.

至于Type,在我的应用程序中,两个是"未定义"而另一个是"video/mp4"(应该是它).在工作应用程序中,所有请求都是"video/mp4".

另外,我Resource interpreted as Other but transferred with MIME type undefined.在控制台收到警告.

我不太确定从哪里开始.我相信这个问题是服务器端的,因为服务文件就像静态资产一样正常.可能是服务器没有发送正确的内容类型.这可能是GridFS的一个问题.我不知道.

无论如何,来源就在这里.您可以提供的任何见解表示赞赏.

rack google-chrome gridfs html5-video mime-types

66
推荐指数
4
解决办法
7万
查看次数

在开发和生产中使用不同的Procfile

我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它.

我在开发中使用foreman和shotgun,使用以下Procfile:

web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
Run Code Online (Sandbox Code Playgroud)

它适用于开发和生产.但事实是,我不想在生产中使用霰弹枪,因为它太慢了.

我们可以为dev和prod使用单独的Procfile配置吗?

rack heroku sinatra shotgun foreman

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

登录Sinatra?

我无法弄清楚如何使用Sinatra记录消息.我不打算记录请求,而是在我的应用程序中的某些点上自定义消息.例如,在获取我想要记录的URL时"Fetching #{url}".

这是我想要的:

  • 指定日志级别的能力(例如:logger.info("Fetching #{url}"))
  • 在开发和测试环境中,消息将写入控制台.
  • 在生产中,只写出与当前日志级别匹配的消息.

我猜这可以很容易地在做config.ru,但我不是100%肯定,我想启用该设置,如果我必须手动创建一个Logger对象本人(以及此外,该级Logger使用方法:Logger,Rack::Logger,或Rack::CommonLogger) .

(我知道在StackOverflow上有类似的问题,但似乎都没有直接回答我的问题.如果你能指出我现有的问题,我会把这个问题标记为副本).

ruby logging rack sinatra

53
推荐指数
3
解决办法
5万
查看次数

你在哪里放置你的Rack中间件文件并要求?

我正在将构建在Rails应用程序中的一些逻辑重构为中间件,而我遇到的一个烦恼似乎是缺乏将它们放在何处的约定.

目前我已经确定了,app/middleware但我可以轻松地将其移至vendor/middleware或者vendor/plugins/middleware......

最大的问题是必须要求顶部的单个文件 config/environment.rb

require "app/middleware/system_message"
require "app/middleware/rack_backstage"
Run Code Online (Sandbox Code Playgroud)

或者我在线上得到未初始化的常量错误config.middleware.use.这可能会很快变得混乱.我宁愿将它隐藏在某个地方的初始化器中.

这个东西有传统的地方吗?


我正在寻找的具体答案是:我可以在哪里放置需求行,以便它们不会混乱environment.rb文件,但仍然在config.middleware.use调用之前加载?我尝试过的所有内容都会导致未初始化的常量错误.


更新:现在我们正在使用Rails 3.0,我像任何其他Rack应用程序一样对待Rails应用程序; 中间件的代码文件进入lib(或列出的宝石Gemfile)并且是必需的和加载的config.ru.

rack middleware ruby-on-rails conventions

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

如何通过Rack提供静态文件?

我目前正在开发基于Rack的应用程序,并希望将所有文件请求(例如filename.filetype)重定向到指定的文件夹.

Rack :: Static仅支持特殊文件夹的文件请求(例如"/ media").

我是否必须编写自己的Rack中间件或是否存在开箱即用的解决方案?

最好的祝福

ruby static rack file

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

如何使用Rails 3/Rack在没有www的情况下重定向?

我知道有很多问题可以解答这个问题.我熟悉.htaccessnginx.conf方法,但我无法访问heroku上的这种传统配置方法.

Simone Carletti给出了这个利用Rails 2.x Metals的答案,但我使用的是Rails 3,这是不兼容的. 将非www请求重定向到Rails中的www URL

请注意:

我不是before_filter在我的ApplicationController中寻找一个简单的东西.我想完成类似于Simone的重写.我认为这至少是网络服务器或像Rack这样的中间件的工作,所以我想把这一点留在实际的应用程序代码中.

目标

redirect                to                  status
----------------------------------------------------
www.foo.com             foo.com             301
www.foo.com/whatever    foo.com/whatever    301
Run Code Online (Sandbox Code Playgroud)

只有主机匹配/^www\./才能重定向.应忽略所有其他请求.

seo redirect rack ruby-on-rails ruby-on-rails-3

37
推荐指数
6
解决办法
1万
查看次数

Sinatra与EventMachine WebSockets一起工作是否成功?

我一直在使用Sinatra一段时间,我想通过websockets推送数据,为我的web-app添加一些实时功能.

我已经成功地使用了gem'em-websocket',但是还没能编写一个带有sinatra Web服务器和web-socket服务器的ruby文件.

我试过旋转跑!或者开始!在单独的线程中关闭方法但没有成功.

有没有人得到这个工作?

我希望将它们放在同一个文件中,然后在两个服务器之间共享变量.

谢谢!

ruby rack sinatra eventmachine websocket

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

有没有一种简单的方法让pow服务https?

pow很棒,但是我的应用程序中的很多东西都假设是https,通过它们并添加"if not dev environment"会很痛苦.是否可以让pow服务https?

ssl https rack ruby-on-rails rack-pow

36
推荐指数
5
解决办法
7339
查看次数