500启动新用户会话时生产适配器轨道出错

时间:2013-09-09 05:00:09

标签: mysql ruby-on-rails controller rails-models

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

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

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

我直接在数据库中创建了用户,所以问题不在于用户不存在,日志文件说表'用户'不存在,但这也是假的...我真的不喜欢我知道最新情况......

OH,BTW这一切都在发展中。登录,用户创建,一切。我正在使用sqlite3进行开发并切换到mysql进行生产,只是搞砸了所有内容......

感谢任何帮助!

1 个答案:

答案 0 :(得分: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_confirmation。

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

users.save 

这很简单!

希望这有助于未来的新手!