当我在我的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上部署它时,它会显示以下错误:
我很确定我做的一切都是正确的,我不知道在这里打破了什么。
感谢您的帮助。
编辑:我刚刚遇到问题。它说我的 created_at 是null
。
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "created_at" violates not-null constraint
我现在正在网上研究如何解决这个问题。
答案 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
我重新部署了我的应用,现在工作正常。