从头设置云 一步步从最初捋清楚哪里出问题
先是选择 Ubuntu Server
下载 Long Term Support 的最新版 目前是20.04版
释放了之前的服务器 又充值创建了个新实例 设置完毕后 发现...
本机操作?!我之前一直操作各种报错...都是在本机地址设置的?!!!要这样
妈呀 完全搞错地址造成的报错吗?嗯 估计这个推测不对啊 因为很多设置都是在登录了远端服务器后的地址上操作的吧?不过注意到这个细节 以后多留心观察也好
顺利进行到数据库安装 这次还是头铁选mysql
但是这次认真去官网找了相关资料 好好的设置了一下数据库的root password
再继续 不随便跳过任何一步
进入数据库console后
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '替换成你设置的密码';
希望替换成功啊 好像也没法验证
通过教程加上官网的资料 设置好了Passenger Nginx这两大哥后 发现一个有趣的事情 免密登录不能用的情况
本机才能免密登录最后 发现我估计是阅读不够认真导致的数据库一直报错...
请用 deploy 身份登入 ssh deploy@XXX
这段我貌似没有待在deploy的用户里面去创建文档,而是跑去root这最高权限去创建文档了...能顺利就有鬼了...
如果这次还出问题,估计就是数据库的root password
没有设置好导致的
嗯 报错 不过好像不是数据库
这个报错貌似是因为文档的格式出问题导致的
production:
secret_key_base: 把刚刚的乱数key贴上来
需要空格后 再“把刚刚的乱数key贴上来”
这个secret文档这个报错的确解决了问题
然后 老朋友来了
还是老问题啊 密码这边需要加引号?试试看吧?
嗯 依旧报错,而且有趣的是...报错的内容是一致的?!所以真的是密码出问题了?! 如果是这样,那是好事啊?!发现问题所在了?!
数据库root密码貌似是关键在尝试通过改密码搞定之前 先查到一些 「数据库跟rails版本冲突」导致问题的解法 先尝试吧
先砍掉branch 重新搞 12节的内容 云服务的部分就算我设置没问题
先把 sqlite 给注解掉
# gem 'sqlite3'
加上gem的版本为低版本
gem 'mysql2', '~> 0.3.21'
报错无法正常安装
尝试
gem install mysql2
gem install mysql2
发现居然安装了两个版本的 mysql
全部删掉
还是一直同样的报错失败...就放弃了 去掉后面的版本限制用 gem 'mysql2'
然后剩下的跟着教程做 依旧老朋友的报错 mysql2
出问题
我就不信邪了就要弄好 哼! 跑去查Capistrano::Rails的GitHub内容 用最新的设置来尝试看看会不会有用
https://github.com/capistrano/rails
修改了一下 config/deploy.rb
里这一行 替换成
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', '.bundle', 'public/system', 'public/uploads'
还是同样的数据库报错
那就尝试了一下 config/deploy.rb
再添加
set :migration_role, :app
还是报错
老朋友报错了那就注解掉 set :migration_role, :app
保留其他的修改 继续死磕
估计就是版本问题
因为我尝试期间遇到
bundle exec rake db:migrate:status
想查看数据库历史
遇到报错
简直再现老朋友报错啊然后靠着
1.把注解掉的 sqlite3
添加到 group :development do
跟之前移过来的
这样操作后 ```bundle install``
就搞定了!正常运作了!
就是数据库版本问题也就是说 搞对了mysql2
的版本 我就能正常运作了
推测都是古旧的ruby版本害的...这个老项目是几年前的啦...
有个新的想法 如果搞来搞去最后还搞不定,直接升级project用的ruby版本是否可行啊?!
第二个怀疑的修改方法是
太晚了 明天搞这两个猜想
先尝试了一下
RAILS_ENV=production bundle exec rake:migrate
果然跑不动啊...
推测就是mysql2数据库问题那么先大胆尝试改 config/database.yml
截图里的database
估计要改成自己的数据库名字
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
database: MyTrip
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
timeout: 5000
注意空格之类的格式 不能有问题!
一开始最初是这样的
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
尝试看看
嗯 还是报错 继续改一下production的数据库呢
database: db/production.mysql2
还是报错 就尝试去Gemfile
用production把mysql2包起来呢?
还是不行,回头只改部分 config/database.yml
不添加有的没的呢?
还是报错 全部改回原样...估计是mysql的版本不对 所以这里不会自动修改相关内容
有趣的是我发现 把sqlite3从 group :development do
移回去原来的地方
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
然后bundle install
后
bundle exec rake db:migrate:status
也正常的!
嗯 来修改版本吧
gem 'mysql2', '~> 0.4.0'
不行 报错依旧
然而我发现一个亮点...云服务器设置的ruby安装的是老旧的 2.4.0版本
云服务器的ruby...我本机的项目MyTrip
ruby是 2.6版本的
本机的ruby
版本高于云服务器的ruby
版本
这...估计是数据库版本冲突的原因吧...想想办法统一一下 或者是否能向下兼容之类的...
现在的想法就是, 把云服务器的ruby
以及本机项目的ruby
全部都提升到最高版本
去ruby的官网直接用
sudo apt-get install ruby-full
把云服务器的ruby版本装了个最新的 没想到啊...居然还是之前的版本?!
就摸索着去安装了一个 rbenv
看着描述就很靠谱啊
Use rbenv to pick a Ruby version for your application and guarantee that your development environment matches production.
嗯 有点微妙 一气之下又去下载RVM
https://github.com/rvm/ubuntu_rvm
然鹅...需要用户密码...我晕...我设置deploy
用户免密...只好回去root 添加rvm给root
用户
然后再回到 deploy
用户这里跑一次
rvm install ruby
云端就能变成最新的ruby版本了
接下来去玩儿本机的项目的ruby版本更新
等等 貌似找到一个解释 说明本机无法正常安装mysql2
的解释
https://github.com/brianmario/mysql2/issues/1021
看完以后我觉得要糟糕...好像项目的ruby要降级...才能跟最新的mysql2
兼容啊...
不过, 这些是window系统的问题 这系统里的mysql2 0.5.2
跟ruby
大于2.6的版本不兼容 不代表...唉 参考参考吧
唯一欣慰的是,估计就是「数据库版本」跟「ruby版本」不兼容导致的报错
然后就在本机用 rvm install 2.5.5
尝试安装了更低版本的ruby
然后跑 bundle
边看这本机的ruby版本降级 边开始寻思着...我把云端的ruby升级到最新的 3.0.0了我去...等下估计要再降级回去2.4的版本...我去...那这样的话...不如本机等一下也一起降级到2.4的ruby吧
云端服务器跟本机 能一致就一致 然后跟数据库版本不冲突 估计就解决了...
嗯,果然还是报错,那么接下来本机先改成2.4.6版本
的ruby
然后用ssh协议去root
用户里 rvm install 2.4.6
结果安装好了root还是显示 ruby 3.0.0
回去deploy用户安装一下低版本的 2.4.6试试看
rvm install ruby-x.x.x
安装好了以后 确定要哪个ruby当默认版本
rvm --default use ruby-x.x.x
两边都记得要bundle一下 然后再试试看 如果还不行...
服务器砍掉 项目的 deploy branch 砍掉,选一个本机能跑的项目是ruby 2.6之下版本的 拿去练手看看 如果没有这样的项目 自己动手做一个
最糟糕的情况,就是动手做一个什么都是最新版本的项目,服务器也都用最新的版本的一切去部署看看...不过这样的话,后续教程估计还有坑等着我 哈哈哈
看了一下,全部本机项目都是 2.6以上的ruby版本 实在不行...我换一个数据库吧 太麻烦了
嗯 发现报错的地方老显示
就用
bundle env
查看了一下运作环境 本机看完去看云端发现这里有问题
User Path /home/deploy/.gem/ruby/2.4.0
继续查资料 发现一个“WHY DOES require 'some-gem' FAIL?”的相关内容提到
觉得有道理 就随手查了一下
查资料发现一个问题参考资料来源
网友评论