自从我部署以来,我一直有这个问题,我无法弄明白。
我会提供一些信息,如果您还有其他需要,请告诉我!谢谢!
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进行生产,只是搞砸了所有内容......
感谢任何帮助!
答案 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
这很简单!
希望这有助于未来的新手!