小编imd*_*rek的帖子

使用Heroku推荐的Unicorn配置错误R12(退出超时)

我的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)

ruby-on-rails heroku unicorn

22
推荐指数
2
解决办法
3325
查看次数

Rails:带有erb的动态robots.txt

我正在尝试在我的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.

ruby-on-rails

15
推荐指数
3
解决办法
6118
查看次数

Rails片段缓存呈现液体模板

使用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)

当它循环遍历项目时,我希望能够对每个项目进行分段缓存.有什么指针吗?

memcached ruby-on-rails liquid

9
推荐指数
1
解决办法
1009
查看次数

Rails:按天分组和另一列

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)

多谢你们!

ruby-on-rails

7
推荐指数
1
解决办法
3713
查看次数

Ruby/Rails:在#inspect之后解码HTML

我有一个数组:

arr = ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

要在某些Javascript中使用此数据,我需要inspect像这样使用:

series: [
  {
    data: <%= arr.inspect %>
  }
]
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会产生:

[&quot;foo&quot;, &quot;bar&quot;]
Run Code Online (Sandbox Code Playgroud)

这是Javascript无法读取的.我尝试使用HTMLEntities.new.decode和解码CGI.unescapeHTML,但仍然得到编码的双引号.

有任何想法吗?

编辑:这是在使用ERB的Rails应用程序中.

ruby ruby-on-rails

1
推荐指数
1
解决办法
340
查看次数

Backbone没有响应路由

我一定是要失去它.我已经设置了最简单的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)

但奇怪的是,仍然没有警报:/

coffeescript backbone.js

1
推荐指数
1
解决办法
407
查看次数