db查询在rails app中永远挂起

时间:2015-07-05 04:59:40

标签: ruby-on-rails postgresql

我在rails应用程序上有一个ruby,它基于railstutorial.org。我认为我的所有用户代码在这一点上完全相同。我想在开始修改之前建立一个工作系统 现在,当我打电话给用户/ 1时,网站挂起(镀铬会让旋转的圆圈逆时针旋转(不知道为什么,它还没有发送任何东西)。它实际上从不显示页面。
登录/ development.log:

Started GET "/users/1" for 72.204.113.219 at 2015-07-05 06:44:40 +0200
Processing by UsersController#show as HTML
  Parameters: {"id"=>"1"}
  User Load (0.6ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]


Started GET "/signup" for 72.204.113.219 at 2015-07-05 06:45:04 +0200

正如您所看到的那样,在我请求另一个页面(显示得很好并且很快)之前,日志会停止24秒 应用程序/视图/用户/ show.html.erb:

<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>

我试着评论一下这个gravatar,希望它可以解决问题(之前和之后一样) 如果我进行用户注册,它将被保存到数据库中而没有错误或问题,如果我尝试使用相同的电子邮件保存用户,我将其添加到 登录/ development.log:

Started POST "/users" for 72.204.113.219 at 2015-07-05 06:45:21 +0200
Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"â", "authenticity_token"=>"gj37C+HvuG+betpHL9Cu3+qlQh+EZm/Tb4je7WBW2yX6DPNE/twTc/fcgHkQbjFhxBxIwWxaL5l2ph9NJiz1Jw==", "user"=>{"name"=>"Alexander Knopf", "email"=>"xyious@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"}
   (0.2ms)  BEGIN
  User Exists (1.1ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('xyious@gmail.com') LIMIT 1
   (0.2ms)  ROLLBACK
  Rendered shared/_error_messages.html.erb (1.0ms)
  Rendered users/new.html.erb within layouts/application (5.3ms)
  Rendered layouts/_header.html.erb (0.4ms)
  Rendered layouts/_footer.html.erb (0.3ms)
Completed 200 OK in 320ms (Views: 111.2ms | ActiveRecord: 1.4ms)

所以看起来数据库运行良好(尝试db:reset,同样的行为(除了我必须重新启动数据库,因为这些查询实际上仍会执行几分钟甚至几小时后阻止数据库丢弃一个表))
最后一部分说,这似乎是一个数据库问题,但我不知道是什么原因或原因。

编辑: 用户控制器:

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    debugger
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end


  private

    def user_params
      params.require(:user).permit(:name, :email, :password, :password_confirmation)
    end
end

应用程序/视图/布局/ application.html.erb:

<!DOCTYPE html>
<html>
<head>
  <title><%= yield(:title) %> | Projectz</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>
  <%= render 'layouts/header' %>
  <div class="container">
    <% flash.each do |message_type, message| %>
      <div class="alert alert-<%= message_type %>"><%= message %></div>
    <% end %>
    <%= yield %>
  </div>
  <%= render 'layouts/footer' %>
  <%= debug(params) if Rails.env.development? %>
</body>
</html>

解决方案:不要将调试器(byebug)放入由apache中的phusion乘客运行的应用程序中。它试图在终端中显示rails控制台并等待输入....永远。

1 个答案:

答案 0 :(得分:1)

在show动作中注释掉调试器。它正在您的应用程序中创建一个断点。或者,如果您打开服务器终端窗口,此时它将“冻结”,您将看到一些调试信息,以便允许应用程序继续执行,只需在终端窗口中按CTRL-d。