设置云服务器 慢慢来

从头设置云 一步步从最初捋清楚哪里出问题

先是选择 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.2ruby 大于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?”的相关内容提到

觉得有道理 就随手查了一下

查资料发现一个问题

参考资料来源

https://guides.rubygems.org/faqs/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容