什么是Ruby中的Rack中间件?对于"中间件"的含义,我找不到任何好的解释.
正如标题所示,您可以使用这两种方法获取客户端的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)
但我真的不知道其含义.
我有一个视频作为网页的背景,我试图让它循环.这是代码:
<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的一个问题.我不知道.
无论如何,来源就在这里.您可以提供的任何见解表示赞赏.
我有一个自制的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)
它适用于开发和生产.但事实是,我不想在生产中使用霰弹枪,因为它太慢了.
我无法弄清楚如何使用Sinatra记录消息.我不打算记录请求,而是在我的应用程序中的某些点上自定义消息.例如,在获取我想要记录的URL时"Fetching #{url}"
.
这是我想要的:
logger.info("Fetching #{url}")
)我猜这可以很容易地在做config.ru
,但我不是100%肯定,我想启用该设置,如果我必须手动创建一个Logger
对象本人(以及此外,该级Logger
使用方法:Logger
,Rack::Logger
,或Rack::CommonLogger
) .
(我知道在StackOverflow上有类似的问题,但似乎都没有直接回答我的问题.如果你能指出我现有的问题,我会把这个问题标记为副本).
我正在将构建在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的应用程序,并希望将所有文件请求(例如filename.filetype)重定向到指定的文件夹.
Rack :: Static仅支持特殊文件夹的文件请求(例如"/ media").
我是否必须编写自己的Rack中间件或是否存在开箱即用的解决方案?
最好的祝福
我知道有很多问题可以解答这个问题.我熟悉.htaccess
和nginx.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\./
才能重定向.应忽略所有其他请求.
我一直在使用Sinatra一段时间,我想通过websockets推送数据,为我的web-app添加一些实时功能.
我已经成功地使用了gem'em-websocket',但是还没能编写一个带有sinatra Web服务器和web-socket服务器的ruby文件.
我试过旋转跑!或者开始!在单独的线程中关闭方法但没有成功.
有没有人得到这个工作?
我希望将它们放在同一个文件中,然后在两个服务器之间共享变量.
谢谢!
pow很棒,但是我的应用程序中的很多东西都假设是https,通过它们并添加"if not dev environment"会很痛苦.是否可以让pow服务https?
rack ×10
ruby ×5
sinatra ×3
conventions ×1
eventmachine ×1
file ×1
foreman ×1
gridfs ×1
heroku ×1
html5-video ×1
http ×1
https ×1
logging ×1
middleware ×1
mime-types ×1
rack-pow ×1
redirect ×1
seo ×1
shotgun ×1
ssl ×1
static ×1
websocket ×1