我的Unicorn配置(从Heroku的文档中复制):
# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 30
preload_app true
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud)
但每次重新启动dyno时,我们都会得到:
heroku web.5 - - Error R12 (Exit timeout) -> At least one process failed to …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Rails(3.0.10)应用程序中呈现动态文本文件(robots.txt),但它继续将其呈现为HTML(称为控制台).
match 'robots.txt' => 'sites#robots'
Run Code Online (Sandbox Code Playgroud)
控制器:
class SitesController < ApplicationController
respond_to :html, :js, :xml, :css, :txt
def robots
@site = Site.find_by_subdomain # blah blah
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/视图/网站/ robots.txt.erb:
Sitemap: <%= @site.url %>/sitemap.xml
Run Code Online (Sandbox Code Playgroud)
但是当我访问时,http://www.example.com/robots.txt我得到一个空白页面/来源,日志说:
Started GET "/robots.txt" for 127.0.0.1 at 2011-11-21 11:22:13 -0500
Processing by SitesController#robots as HTML
Site Load (0.4ms) SELECT `sites`.* FROM `sites` WHERE (`sites`.`subdomain` = 'blah') ORDER BY created_at DESC LIMIT 1
Completed 406 Not Acceptable in 828ms
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
注意:我将此添加到config/initializers/mime_types,因为Rails抱怨不知道.txt mime类型是什么:
Mime::Type.register_alias "text/plain", :txt
Run Code Online (Sandbox Code Playgroud)
注意2:我确实从公共目录中删除了stock robots.txt.
使用ERB,您可以在列表视图中对缓存单个记录进行分段,如下所示:
<% @items.each do |item| %>
<% cache item do %>
<%= item.name %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
因此,第二次查看列表时,将从缓存加载每个呈现的项目.使用Liquid模板时是否可以使用相同的方法?模板可能类似于:
{% for item in items %}
{{ item.name }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
并呈现:
template = Liquid::Template.parse(template)
template.render('items' => @items)
Run Code Online (Sandbox Code Playgroud)
当它循环遍历项目时,我希望能够对每个项目进行分段缓存.有什么指针吗?
class Visitor
has_many :sessions
end
class Session
belongs_to :visitor
belongs_to :site
end
class Site
has_many :sessions
end
Run Code Online (Sandbox Code Playgroud)
我希望能够每天获得一个网站的访问者数量.由于访问者不是直接与某个网站相关联,而是会话,我需要获取特定网站的所有会话,按天分组,然后按visitor_id分组.这是一些示例数据(按created_at ASC排序):
visitor_id site_id created_at
6 3 2011-09-27
6 3 2011-09-27
7 3 2011-09-27
2 3 2011-09-29
7 3 2011-09-29
Run Code Online (Sandbox Code Playgroud)
理想情况下,我应该看到在09/27有2个独特的访客,并在09/29还有2个独特的访客.我试过这个:
Session.group('date(created_at)').group('visitor_id').size
Run Code Online (Sandbox Code Playgroud)
但我得到了这个(这是不正确的):
# => {Tue, 27 Sep 2011=>3, Thu, 29 Sep 2011=>2}
Run Code Online (Sandbox Code Playgroud)
多谢你们!
我有一个数组:
arr = ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)
要在某些Javascript中使用此数据,我需要inspect像这样使用:
series: [
{
data: <%= arr.inspect %>
}
]
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会产生:
["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)
这是Javascript无法读取的.我尝试使用HTMLEntities.new.decode和解码CGI.unescapeHTML,但仍然得到编码的双引号.
有任何想法吗?
编辑:这是在使用ERB的Rails应用程序中.
我一定是要失去它.我已经设置了最简单的Backbone应用程序,但似乎无法让路由响应.这是我的路由器(在coffeescript中):
class BackboneSupport.Routers.TicketsRouter extends Backbone.Router
initialize: ->
@tickets = new BackboneSupport.Collections.TicketsCollection()
routes:
"/new" : "newTicket"
".*" : "index"
newTicket: ->
alert 'hi, from the new ticket route'
index: ->
// just to prove a point
$('#tickets').html('tickets go here')
@navigate('/new')
Run Code Online (Sandbox Code Playgroud)
我让整列火车继续行驶:
<div id="tickets"></div>
<script type="text/javascript">
$(function() {
window.router = new BackboneSupport.Routers.TicketsRouter();
Backbone.history.start();
});
</script>
Run Code Online (Sandbox Code Playgroud)
正如您所料,根路径(索引)#tickets使用占位符文本填充并成功导航到/新路由(通过地址栏确认),但是,它不会发出任何警报,这意味着该newTicket方法未被触发.
我在这里错过了什么?
更新:
在下面的rjz中,我将导航方法更新为:
@navigate('/new', {trigger: true})
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,仍然没有警报:/