一般Rails项目预编译就是跑几句命令就行了,但是我在阿里云实际尝试部署的时候,还是遇到了一些坑,记录一下。
一、版本说明
系统版本:Alibaba Cloud Linux 3.2104 LTS 64位
Ruby版本:2.7.8
Rails版本:5.1.7
数据库版本:PostgreSQL 14.10
二、安装Gem
在项目目录下执行命令:
RAILS_ENV=production bundle install
因为用到了PostgreSQL,所以会用到一个叫pg的Gem,然后装到这个Gem就报错了。
一长串报错,里面的核心内容大概是这些:
……
checking for pg_config... no
checking for iibpq per pkg-config... no
Using libpq from
checking for libpq-fe.h... no
Can't find the'libpq-fe.h header
……
Unable to find PostgreSQL client library.
Please install libpq or postgresql client package like so:
sudo apt install libpq-dev
sudo yum install postgresql-devel
sudo zypper in postgresql-devel
sudo pacman -S postgresql-libs
……
看提示缺少支持的包,然后执行安装命令:
yum install postgresql-devel
跑完再试,发现还是不行,琢磨半天,发现要执行这句:
yum install postgresql14-devel
接着再试,不提示缺包了,但是pg_config还是找不到,这里改为手动安装pg,并指定数据库相关配置文件路径,比如我的安装路径是:
gem install pg -v 1.2.2 -- --with-pg-config=/usr/pgsql-14/bin/pg_config
安装成功后再bundle install就顺利完成了。
三、数据库迁移
执行命令:
RAILS_ENV=production rake db:migrate
又又报错了:
rake aborted!
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime.
……
最省力的解决方法是装个nodejs:
yum install nodejs
然后再试就通过了。
四、预编译
执行命令:
RAILS_ENV=production rake assets:precompile
等待结束,终于没有再报错了。下一步就可以部署了。