我正在创建一个包含Login的Rails应用程序。在开发中一切都很好。登录生产(Heroku)失败。
因为我是RoR的新手,所以我遵循这个Basic Tutorial。该应用程序包含“用户”模型。用户具有布尔属性“已激活”,因为在注册后需要激活帐户。在登录期间有一个语句(请参阅sessions_controller.rb):
if user.activated?
这在开发中是正确的,在生产中是错误的。
我用seeds.rb推送数据库。在其他页面上,我可以看到内容,也用seeds.rb初始化,所以我认为这不是一般的数据库问题。
由于数据库似乎没问题并且它在开发中运行,我假设我只是错过了一些东西,这对我来说很难被发现作为一个新手,并且希望很容易被经验丰富的程序员检测到。
这是我的代码的一部分。说你是否需要更多。
sessions_controller.rb:
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_to changenews_path
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
这将检查登录的用户是否已激活。在生产中它会导致“其他>消息[...]”。
我的Gemfile:
source 'https://rubygems.org'
gem 'rails', ' 5.1.6'
gem 'bootstrap', ' 4.2.1'
gem 'puma', ' 3.9.1'
gem 'sass-rails', ' 5.0.6'
gem 'uglifier', ' 3.2.0'
gem 'coffee-rails', ' 4.2.2'
gem 'jquery-rails', ' 3.1.0'
gem 'turbolinks', ' 5.0.1'
gem 'jbuilder', ' 2.7.0'
gem 'coffee-script-source', ' 1.8.0'
gem 'bcrypt', ' 3.1.12'
gem 'popper_js', ' 1.14.5'
gem 'font-awesome-sass', ' 5.8.0'
group :development, :test do
gem 'sqlite3', ' 1.3.13'
gem 'byebug', ' 9.0.6', platform: :mri
end
group :development do
gem 'web-console', ' 3.5.1'
gem 'listen', ' 3.1.5'
gem 'spring', ' 2.0.2'
gem 'spring-watcher-listen', ' 2.0.1'
end
group :test do
gem 'rails-controller-testing', '1.0.2'
gem 'minitest', '5.10.3'
gem 'minitest-reporters', '1.1.14'
gem 'guard', '2.13.0'
gem 'guard-minitest', '2.4.4'
end
group :production do
gem 'pg', '0.18.4'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
我试图将所有宝石设置为最新版本('> = X.Y.Z')并执行“捆绑安装”,但没有任何效果。
和Heroku日志(摘录):
:23.352114+00:00 app[web.1]: I, [:23.352005 #4] INFO -- : [shortened] Started POST "/login" for 77.183.95.212 at 2019-04-09 11:43:23 +0000
:23.353232+00:00 app[web.1]: I, [:23.353123 #4] INFO -- : [shortened] Processing by SessionsController#create as HTML
:23.353509+00:00 app[web.1]: I, [:23.353266 #4] INFO -- : [shortened] Parameters: {"utf8"=>"✓", "authenticity_token"=>"shortened", "session"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
:23.356478+00:00 app[web.1]: D, [:23.356409 #4] DEBUG -- : [shortened] [1m[36mUser Load (0.8ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."email" = $1 LIMIT $2[0m [["email", "[email protected]"], ["LIMIT", 1]]
:23.432392+00:00 app[web.1]: I, [:23.432248 #4] INFO -- : [shortened] Redirected to https://myappname.herokuapp.com/
我无法从调试消息中获取任何信息。我不知道“LIMIT”代表什么。我希望你们中的某个人知道我的问题的答案。
所以通常我希望登录成功,因为数据库似乎没问题。目前user.activated?在Heroku中是假的。
提前致谢!
heroku run db:seed
来实际播种数据库?heroku run rails c
,然后运行u = User.all
并通过查看用户正确播种的输出来手动检查。heroku logs -n 200
(200为要显示的行数)让我们(以及您自己)更好地理解错误。