Rails网站登录无法在生产环境中使用(Heroku)

时间:2019-04-09 12:02:33

标签: ruby-on-rails heroku login

我正在创建一个包含登录名的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中是错误的。

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. Heroku在按下代码时运行捆绑安装,因此您无需运行此安装。

  2. 您是否运行过heroku run db:seed来为数据库实际植入种子?

  3. 如果这样做,则可以先运行heroku run rails c,然后运行u = User.all,然后通过查看输出来确定用户已被正确播种,从而手动进行检查。

  4. (观点)我建议为用户/登录等使用“ devise” gem。但是请随意使用您更喜欢的方式。

  5. 请使用heroku日志通过运行heroku logs -n 200(要显示的行数为200)来使我们(和您自己)更好地了解问题所在。