我正在创建一个包含登录名的Rails应用程序。在开发中,一切都很好。在生产环境(Heroku)中登录失败。
由于我是RoR的新手,所以请遵循此Basic Tutorial。该应用程序包含“用户”模型。用户具有布尔属性“已激活”,因为注册后需要激活帐户。登录期间有一条语句(请参见sessions_controller.rb):
if user.activated?
在开发中是正确的,在生产中是错误的。
我用seed.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
这将检查登录用户是否已被激活。在生产中会导致“其他>消息[...]”。
我的宝石文件:
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]
我试图将所有gem设置为最新版本('> = 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"=>"mymail@mymail.de", "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", "mymail@mymail.de"], ["LIMIT", 1]]
:23.432392+00:00 app[web.1]: I, [:23.432248 #4] INFO -- : [shortened] Redirected to https://myappname.herokuapp.com/
我无法从调试消息中获取任何信息。而且我不知道“ LIMIT”代表什么。我希望你们中的某人知道我的问题的答案。
因此通常我希望登录成功,因为数据库似乎还可以。当前是用户激活的吗?在Heroku中是错误的。
谢谢!
答案 0 :(得分:0)
Heroku在按下代码时运行捆绑安装,因此您无需运行此安装。
您是否运行过heroku run db:seed
来为数据库实际植入种子?
如果这样做,则可以先运行heroku run rails c
,然后运行u = User.all
,然后通过查看输出来确定用户已被正确播种,从而手动进行检查。
(观点)我建议为用户/登录等使用“ devise” gem。但是请随意使用您更喜欢的方式。
请使用heroku日志通过运行heroku logs -n 200
(要显示的行数为200)来使我们(和您自己)更好地了解问题所在。