Heroku Rails - 500内部服务器错误

时间:2017-11-15 20:27:54

标签: ruby-on-rails heroku

当我在我的Rails应用程序(本地)发布内容时,它完美无缺。但是,当我在Herokuapp上部署它时,它会中断。这就是我所拥有的:

#Gemfile

# Use sqlite3 as the database for Active Record
gem 'sqlite3', group: :development
gem 'pg', '0.18.1', group: :production
gem 'rails_12factor', group: :production

#database.yml

production:
<<: *default
adapter: postgresql
database: db/production.sqlite3

然后我继续将我的应用程序部署到Heroku:

git add .
git commit -m "comment"
git push heroku master
heroku run rake db:migrate
heroku run rake db:seed

我已使用以下内容检查了我的版本:

heroku run rake db:version
>> Current version: 20171103035018
rake db:version
>> Current version: 20171103035018

最后,这是我执行创建操作的控制器:

#suggestions_controller.rb

def create
    @suggestion = Suggestion.new(suggestion_params)

    if @suggestion.save
        flash[:notice] = "Suggestion successfully posted!"
        redirect_to root_path
    else
        flash[:error] = "Suggestion failed to post!"
        redirect_to root_path
    end
end

private
    def suggestion_params
        params.require(:suggestion).permit(:suggester, :ip, :suggestion_type, :title, :body)
    end

我在 localhost 上尝试了这个并且它创建得很好,但是当我在Heroku上部署它时,它会显示以下错误:

heroku error

我很确定我做的一切都是正确的,我不知道在这里打破了什么。

感谢您的帮助。

编辑:我刚刚遇到问题。它说我的 created_at null

ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "created_at" violates not-null constraint

我现在正在网上研究如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

好吧,你应该看看你的日志。 Heroku记录了他们的日志记录:https://devcenter.heroku.com/articles/logging 根据您的描述,它可能与您的数据库设置有关,例如错误的database.yml。 如果日志对您没有帮助,请修复上面发布的database.yml的缩进。

答案 1 :(得分:0)

我弄明白了这个问题。这确实是这个特殊的错误信息:

ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "created_at" violates not-null constraint

我必须将这行代码添加到suggestions_controller.rb

def create
    Suggestion.record_timestamps = true; #added this line of code
    ... #other logic
end

当我对一篇文章进行upvote和downvote时,我不希望它更新时间戳,例如:

def upvote
    Suggestion.record_timestamps = false;
    ... #other logic
end

我重新部署了我的应用,现在工作正常。