0

自从我部署以来,我一直有这个问题,我无法弄清楚。

我会提供一些信息,如果您需要其他信息,请告诉我!谢谢!

I, [2013-09-08T12:44:31.935143 #19456]  INFO -- : Started POST "/sessions" for {IP ADDRESS} at 2013-09-08 12:44:31 -0700
I, [2013-09-08T12:44:31.937969 #19456]  INFO -- : Processing by SessionsController#create as HTML
I, [2013-09-08T12:44:31.938102 #19456]  INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"{AUTHENTICITY TOKEN}", "email"=>"mike@test.com", "password"=>"[FILTERED]", "commit"=>"Log In"}
I, [2013-09-08T12:44:31.941064 #19456]  INFO -- : Completed 500 Internal Server Error in 3ms
F, [2013-09-08T12:44:31.943631 #19456] FATAL -- : 
ActiveRecord::StatementInvalid (Could not find table 'users'):
app/controllers/sessions_controller.rb:6:in `create'

显然,它告诉我“用户”表不存在,但 BS,因为它确实存在。也许它找不到表?我也认为这很奇怪,因为我使用 Rails 迁移创建了表。

这是我的生产适配器仅供参考:

production:
  adapter: mysql
  database: {DATABASENAME}
  username: {USERNAME}
  password: {PASSWORD}
  host: localhost
  port: 3306

这是我的种子文件:

User.create([{ email: 'mike@test2.com' }, { password_digest: 'password' }])

我的用户模型:

class User < ActiveRecord::Base
  has_secure_password

  validates_uniqueness_of :email
end

我的会话控制器(处理登录):

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_url, notice: "Logged in!"
    else
      flash.now.alert = "Email or password is invalid"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, notice: "Logged out!"
  end
end

我直接在数据库中创建了用户,所以问题不在于用户不存在,日志文件说表“用户”不存在,但这也是错误的......我真的不知道是什么进行中...

哦,顺便说一句,这一切都在开发中。登录,用户创建,一切。我使用 sqlite3 进行开发并切换到 mysql 进行生产,只是搞砸了一切......

任何帮助表示赞赏!

4

1 回答 1

0

为了将来参考,如果其他人遇到他们的种子无法正常工作的问题,这是修复:

这就是我使用的:

User.create([{ email: 'mike@test2.com' }, { password_digest: 'password' }])

这应该是:

users =User.create!(:email 'mike@test2.com', :password 'password', :password_confirmation 'password')

users.save

使用

Create! 

而不仅仅是简单的

Create 

启用验证,种子将失败并解释问题。就我而言,我使用的是列名 password_digest,而不是 password 和 password_confirmation。

此外,将种子创建保存在变量中(在我的情况下为用户),然后通过执行以下操作保存所述变量:

users.save 

就那么简单!

希望这对以后的新手有帮助!

于 2013-09-09T14:13:39.683 回答