【问题标题】:Ruby on Rails bundle exec rspec spec/ massive errorsRuby on Rails bundle exec rspec 规范/大量错误
【发布时间】:2013-09-27 01:57:08
【问题描述】:

我对编码和 Mhartl 教程的第 8 章还很陌生,当我尝试 -bundle exec rspec spec/ 时遇到 34 个错误。不幸的是,我只能找出错误 19-34(1-18 不适合我的终端)。

Static pages About page it should behave like all static pages
<[31mFailure/Error:<-[0m <[31mbefore { visit root_path }<]0m
<[31mActionView:Template::Error<[0m:
  <[31mSQLite3::SQLException: no such column: users.remember_token: SELECT
"users".* FROM "users" WHERE "users"."remember_token" = 'lotsofrandomcharacters' LIMIT     1<[0m

即错误19。其他类似,参考:

Static pages Help page
Static pages Help page it should behave like all static pages
Static pages Help page it should behave like all static pages
Static pages Home page
Static pages Home page it should behave like all static pages
Static pages Home page it should behave like all static pages
Static pages Contact page
Static pages Contact page it should behave like all static pages
Static pages Contact page it should behave like all static pages
User
User remember token remember_token
User return value of authenticate method with valid password
User return value of authenticate method with valid password
User when email address is already taken

我是一个编程菜鸟,这让我难以接受。

这是我在本章中处理的几个文件

app/views/layouts/_header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="navbar-inner">
    <div class="container">
      <%= link_to "sample app", root_path, id: "logo" %>
      <nav>
        <ul class="nav pull-right">
          <li><%= link_to "Home", root_path %></li>
          <li><%= link_to "Help", help_path %></li>
          <% if signed_in? %>
            <li><%= link_to "Users", '#' %></li>
            <li id="fat-menu" class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                Account <b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><%= link_to "Profile", current_user %></li>
                <li><%= link_to "Settings", '#' %></li>
                <li class="divider"></li>
                <li>
                  <%= link_to "Sign out", signout_path, method: "delete" %>
                </li>
              </ul>
            </li>
          <% else %>
            <li><%= link_to "Sign in", signin_path %></li>
          <% end %>
        </ul>
      </nav>
    </div>
  </div>
</header>

app/helpers/sessions_helper.rb

module SessionsHelper

  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

当我运行 rails 服务器并尝试在 localhost:3000 上查看它时,我得到:

sample_app/app/views/layouts/_header.html.erb 其中第 9 行提出:

SQLite3::SQLException: 没有这样的列:users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'lotsofcharacters' LIMIT 1

这一行指的是:

老实说,我不确定要在此处列出哪些其他文件,因为我什至无法阅读完整的错误。我相信我的联系/关于/主页很好,因为它们在本章中保持不变,但如果有人认为我应该列出这些,我可以这样做。感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby railstutorial.org


    【解决方案1】:

    错误提示您的数据库设置不正确:

    SQLite3::SQLException: 没有这样的列:users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'lotsofcharacters' LIMIT 1

    这表示您缺少一列。该列的定义可能在您的一个数据库迁移文件中。

    运行bundle exec rake db:migrate(用于开发)和bundle exec rake db:migrate RAILS_ENV=test(用于测试)运行之前未运行的数据库迁移,然后重试。

    更新:

    数据库迁移应该是增量的,但如果您的应用程序不是这样编写的,您可以查看这些:

    1. 如果确实有一行添加了缺失的列,请检查您的数据库迁移脚本。
    2. 如果确实存在缺失列的行,请检查 DB 架构文件的原始副本。
    3. 请参阅@Jeremy 的回答。

    【讨论】:

    • 感谢您的快速回复!我试过这个,我最终得到了 34 个错误,(尽管这些看起来不同)。其中 8 个现在是身份验证错误。并且使用无效信息注册的用户页面不应创建似乎经常出现的用户
    • 浏览它们。希望有些是共享代码的问题,实际上没有 34 个不同的问题需要修复。
    • 看起来您缺少模型验证规则。您是否看到了失败的详细信息,或者您在问题中包含的测试摘要是否全部获得?
    • 他们都没有提到这样的专栏。非常类似于 SQLite3::SQLException: no such column: users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token"
    • 我只能看到20到34的错误。第一批被我的终端截断了
    【解决方案2】:

    我在学习 Mhartl 教程时遇到了同样的问题。 出现此问题是因为当您的数据库已经有一些用户时,“remember_token”迁移将不起作用。 您必须先清理数据,然后执行 db:migrate.like :

    rake db:drop 
    db:create 
    rake db:migrate
    

    (小心:这将删除您的所有数据)

    【讨论】:

      【解决方案3】:
      SQLite3::SQLException: no such column: users.remember_token:
      

      听起来你还没有运行rake db:migrate。然后运行 ​​rake db:test:prepare 以使用 schema.rb(db:migrate 生成)来生成您的测试数据库。

      请参阅此rails guide 了解更多信息。

      【讨论】:

      • 感谢您的回复。我在此之前运行了 rake db:migrate 但再次运行它。我不太了解发生了什么,这可能就是我仍然很卡住的原因。
      【解决方案4】:

      我不知道你是否已经解决了这个问题,但我自己已经解决了。由于某种原因,'$ rails generate migration add_remember_token_to_users' 留下了一个空壳,所以我不得不去 db/migrate/[ts]_add_remember_token_to_users.rb 并手动添加:

      add_column :users, :remember_token, :string
      add_index  :users, :remember_token
      

      到改变方法。然后运行:

      $ bundle exec rake db:migrate

      $ bundle exec rake test:prepare

      这应该处理您遇到的“SQLite3::SQLException: no such column: users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token"...' 错误.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-05
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2014-01-01
        相关资源
        最近更新 更多