最近在本地完成了高级软件工程的项目,需要将其部署到heroku,一开始觉得非常麻烦,又要翻墙,还得绑定信用卡,添加插件......但是当真正部署好之后还是发现了其强大之处。因此通过该博客记录部署过程中遇到的问题,如有不足之处请指正。
一.项目托管:
具体的项目在GitHub上,点击这里(明明是用ruby on rails写的为神马GitHub上提交后识别为JavaScript......),环境和资源都已经写的很清楚了,这里就不说了。
二.部署到heroku:
这里会遇到很多问题,如果你的项目只是一个简单的demo那么这个环节还是比较省事的,如果用到了云存储平台类似的插件、JavaScript等等,就会遇到很多问题了。
1.首先要注册heroku,这里强烈推荐一开始就绑定信用卡,可以为以后方便很多,一开始我还傻傻的绑定国内的,结果发现自己太天真的了,后来通过某宝买了美国的visa信用卡,这一步就搞定了(万能的某宝啊)。
2.开始部署,这里我还是详细写一下部署的过程,以便后续再用到不用再翻别的大神的blog了,具体详细图文后面我会附上链接,这里只写指令了。
因为我是用ruby on rails开发,开发环境为Cloud9,C9上的数据库为sqlite,而heroku的数据库是postgresql,所以需要修改一下数据库包的位置,将sqlite包加到测试环境里,将postgresql包加到生产环境里,否则后续会报错:
1)使用git生成public ssh key,输入:ssh-keygen -t rsa
2)登陆heroku,输入:heroku login,这个地方有时候会提示输入任意键登录或输入q退出,然后就会卡住,如果遇到这种情况,输入heroku login -i
3)将生成public ssh key添加到heroku上,输入:heroku keys:add
4)创建heroku程序名heroku create
5)接下来就是git指令,和push到远程库上一样(这是我觉得heroku非常方便的地方)git add .
6)提交git commit -m '注释'
7)推上去git push heroku(从这里开始和原blog不太一样,但道理是一样的,我觉得这个更好理解一些,当然你也可以按照原blog来)
8)还原数据库heroku pg:reset DATABASE
9)迁移数据库heroku run rails db:migrate
10)生成数据种子heroku run rails db:seed
11)大功告成heroku open
如果部署成功的话,打开你的heroku就会看到新生成的程序,和每一次提交成功的记录,只要不出现红就表示部署成功了:
三.heroku中添加组件:
1.前面绑定了信用卡这里就很方便了,因为在我的项目中,有上传图片和聊天的功能,图片保存到了cloudinary上,聊天功能则是由Pusher构建,而默认的heroku是不支持的,所以要添加cloudinary和Pusher组件。
2.选择Resources选项下的add-ones,这里面有大量的插件可以使用,真的是很惊讶,选择cloudinary和Pusher,然后安装即可:
3.安装成功后,需要对cloudinary和Pusher的API接口属性进行对接配置,找到config目录下的application.yml文件,里面包含了之前写好的属性值,这些都是在一开始写项目的时候弄好的,输入的指令为heroku config:set(比如cloudinary_cloud_name=“ ”):
4.设置好之后可以在heroku中看到设置完成的日志:
5.如果你的项目中用到了JavaScript,那么需要在将项目推送到heroku前进行预编译,首先将config/environments/production.rb文件中的config.assets.compile设置为true(虽然这并不是一个好的做法,但目前为止是可以解决问题的)
然后执行 bundle exec rake assets:precompile,最后重新添加到暂存区并push即可。
四.参考资料:
1.heroku部署:https://www.cnblogs.com/jecyhw/p/4924349.html
2.使用ruby on rails 构建聊天程序:https://pusher.com/tutorials/chat-app-ruby-rails
3.heroku官方安装cloudinary文档:https://devcenter.heroku.com/articles/cloudinary#local-environment-setup
4.heroku官方安装pusher文档:https://devcenter.heroku.com/articles/pusher