原文出处:
部署的过程在上文中已经讲得很详细了,本文的目的是为了记录自己在部署过程中遇到的一些问题,以及补充教程中不足的地方。
1.部署遇到的问题
- 所有配置完成之后,执行
cap product deploy:initial
时出现了Don't know how to build task 'start'
错误,可以在Capfile中require capistran/puma
的下面添加install_plugin Capistrano::Puma
解决,这是因为capistran3-puma需要添加这一行来加载puma默认的task。 - 在部署的过程中,如果出现了
PG::ConnectionBad - could not connect to server: Connection refused
, 那么可以sudo service posgresql restart
来解决问题 - 在安装postgresql的时候出现了
Can't find the 'libpq-fe.h header
的错误,是因为在服务端安装postgresql的时候没安装libpq-dev
导致的,所以:
sudo apt-get install libpq-dev
# 注意:是libpq而不是libpg,这个地方很容易看错
- 如果在服务端没有安装
Javascript Runtime
的话会报这样一个错误Uglifier gem needs JavaScript runtime
,nodejs是一个选择
sudo apt-get install nodejs
- 部署的过程中,在执行rake db:migrate的时候会提示一个错误
database xxx not exist
,这是因为在第一次部署的时候需要登录到vps上去手动创建数据库,记得带上环境变量
RAILS_ENV=production bundle exec rake db:create
- 但是在手动创建数据库时,如果你使用的是postgresql的话,可能会提示你
role xxx(你此时的linux user name) does not exist
,你需要创建一个跟你linux用户名一样的postgre role,不然是无法创建数据库的
# 先使用持有管理员权限的postgre默认role: postgres登录
sudo -i -u postgres
# 创建新的role deploy
createuser --createdb --superuser deploy
# 然后就可以 ```rake db:create``` 或者 ```createdb xxx``` 来创建数据库了
- 在部署完成之后,使用server public ip来访问应用时出现了这样一个问题
an-unhandled-lowlevel-error-occurred-the-application-logs-may-have-details
首先想到的就是看log,但是从production.log,nginx.error.log到puma.error.log都没有找到有用的信息,后来发现原来教程中deploy.rb中的puma.access.log和puma.error.log的位置反了,所以应该去puma.access.log中看,最后发现是缺少production的secret_key_base环境变量,所以:
# 现在vps上生成key
RAILS_ENV=production bundle exec rake secret
# 然后复制生成的key,在deploy.rb中增加如下配置
set :default_env, {
'SECRET_KEY_BASE' => 'key'
}
# 还需要注意一点,注意查看自己的.gitignore文件中有没有secrets.yml
- 部署完成后,如果出现了原本在开发环境中的资源在生产环境报404的话(如app/assets/images中的图片,app/assets/fonts中的字体文件等),那么在
config/environment/production.rb
中:
config.public_file_server.enabled = true
网友评论