部署遇到的坑:
1.專案沒有Merge
首先价捧,我在項(xiàng)目rails_recipe終端那里饭耳,想要部署進(jìn)去偶垮,發(fā)現(xiàn)錯(cuò)誤了遗增,好像說gem mysql2的問題叫惊,我發(fā)現(xiàn)我沒有加入這個(gè)gem,回去看教程原來只寫了pg這個(gè)gem做修,教程說只要一個(gè)就行霍狰,但后來我又用了sql:
數(shù)據(jù)庫用 MySQL 的話,加上 gem "mysql2"
饰及,數(shù)據(jù)庫用 PG 的話蔗坯,則用 `gem "pg"
我就改了過來,bundle后還是不行燎含。糾結(jié)和看了好久發(fā)現(xiàn)原來我的new分支沒有merge到master宾濒,而:
修改 config/deploy/production.rb
,設(shè)定要用哪一個(gè) branch 放在服務(wù)器上屏箍,以及服務(wù)器的 IP 位置:
+ set :branch, "master"
- # server "example.com", user: "deploy", roles: %w{app db web}, my_property: :my_value
+ server "47.92.82.116", user: "deploy", roles: %w{app db web}, my_property: :my_value
這里是要用master來做的绘梦。git merge new
后還是出現(xiàn)錯(cuò)誤:
2.config.secret_key
顯示devise …什么config.secret_key橘忱,于是我谷歌了下,發(fā)現(xiàn)要在config/initializers/devise.rb
里加入
config.secret_key = '94665bd65656125f66d84094af9cf36f710db8761dc2be0d1413****************'
這個(gè)key在終端報(bào)錯(cuò)就有顯示卸奉。
3.database.yml密碼寫錯(cuò)
放進(jìn)去了還是報(bào)錯(cuò)钝诚。。榄棵。這次不同的錯(cuò)誤了凝颇。說:
rake stdout: Nothing written
rake stderr: rake aborted!
Mysql2::Error: Access denied for user
'root'@'localhost' (using password: YES)
我谷歌了好久,用他們的方法做還是沒用疹鳄。后來對(duì)照教程拧略,發(fā)現(xiàn)在遠(yuǎn)端nano /home/deploy/rails-recipes/shared/config/database.yml
這里,我里面的密碼寫錯(cuò)了尚辑。辑鲤。。心里頓時(shí)萬千的草泥馬奔騰杠茬。改回來后就正常了。
4.這次的教訓(xùn)
好好看報(bào)錯(cuò)弛随,英語不懂可以翻譯的瓢喉,另外,知道這代碼是怎么回事舀透,別瞎搞栓票。例如:
Mysql2::Error: Access denied for user 'root'@'localhost' (using password: YES)
這個(gè),在這篇文章連接MySQL數(shù)據(jù)庫時(shí)常見故障問題的分析與解決就提到
錯(cuò)誤信息1 :ERROR 1045 (28000): Access denied for user 'usera'@'localhost' (using password:YES)
錯(cuò)誤信息2 :ERROR 1045 (28000): Access denied for user 'usera'@'localhost' (using password:NO)
上面的對(duì)比可總結(jié)出一點(diǎn)愕够,使用mysql命令進(jìn)行登錄時(shí)走贪,若有密碼輸入行為并輸入了字符,則驗(yàn)證出錯(cuò)后惑芭,則返回的錯(cuò)誤提示中坠狡,對(duì)于 (using password: ?)中?的關(guān)鍵字,則返回的是YES遂跟,若沒有密碼輸入行為逃沿,或無密碼字符輸入,則返回的是NO幻锁。
也就是說:我輸入的密碼錯(cuò)誤了凯亮。這樣我就不會(huì)再瞎折騰了。
回去deploy那里設(shè)置密碼:
production:
adapter: mysql2
encoding: utf8mb4
database: rails_recipes
host: localhost
username: root
password: xxxxxxxxxx
換專案繼續(xù)
我之前的解不了哄尔,于是我認(rèn)為是專案問題假消,換了,依然解了好多天岭接。
5.rake sederr…..Fixnum is deprecated
如上圖顯示富拗,我解決不了堂鲤,問了lucia,她說fixnum是一個(gè)class,所以應(yīng)該是專案導(dǎo)致的媒峡。我谷歌了一下瘟栖,嘗試bundle update rails
,解決了。問題是又遇到下面的坑:
6. database沒有空格
我看到里面說config谅阿,我就查看專案config有沒有錯(cuò)誤半哟,發(fā)現(xiàn)里面要修改的都沒有錯(cuò)誤,就回去遠(yuǎn)端看签餐,發(fā)現(xiàn)在設(shè)定database.yml的時(shí)候寓涨,password和密碼沒有空格。加上空格保存回來又報(bào)錯(cuò):
7. 加入config.secret_key
應(yīng)該是秘鑰沒有設(shè)置好氯檐,在本專案的輸入rake secret
出來的復(fù)制回去黏貼戒良。
還是失敗,原來看提示要在atom的config/initializers/devise.rb放入:
config.secret_key = '60890da3636586597e70569da322b6657a6529569fcbfcf50b5fb55917bc28b18e1d401db65c4526ea809857bbb6c768437f586ac42d6*********************'冠摄。
終于搞掂了糯崎。
最后部署成功,打開卻顯示
8. Incomplete response received from application
我日河泳。
找了好久沃呢,問了助教,然后谷歌嘗試了很多拆挥,終于找到一個(gè):http://www.reibang.com/p/842727e8d17f
這個(gè)同學(xué)說
解決:
Go to your rails app directory
cd /path/rails-app
Generate secret key base
rake secret RAILS_ENV=production
Set environment variable
SECRET_KEY_BASE=<the-secret-key-base>
Restart the Rails app
touch /path/rails-app/tmp/restart.txt
剛開始在遠(yuǎn)端進(jìn)行薄霜,后來反復(fù)倒騰,才發(fā)現(xiàn)要在自己的專案輸入rake secret RAILS_ENV=production
然后放進(jìn)自己的sereet_key_base才成功纸兔。
為什么教程的rake secret
不行惰瓜?而一定要
:rake secret RAILS_ENV=production
不知道。不過別開心太早汉矿,我嘗試注冊(cè)郵箱崎坊,卻又something went wrong>>>>
9. something went wrong
解了三個(gè)小時(shí),還是沒解出來负甸。
在navbar這里:
<% if current_user.try(:admin?) %>
加上try還是失敗流强。反正錯(cuò)誤記錄一直是這樣。
而且錯(cuò)誤Log一直提示是is_admin的問題呻待,但我本地正常打月,然后在遠(yuǎn)端我也嘗試RAILS_ENV=production bundle exec rake db:drop db:create db:migrate
rake aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
這里說rake 失敗了,我竟然不去注意看蚕捉。我猜大概是因?yàn)榻饬颂肂UG奏篙,自己很泄氣,很著急把它解決繼續(xù)做下去。所以不好好讀代碼和終端反饋秘通。
記孜稀:遇到BUG,一定要冷靜下來肺稀,好好思考第股,別著急。深呼吸十次话原。
后來助教讓我RAILS_ENV=production bundle exec rake db:migrate:reset
我截屏給他看:
指令后面按提示加上一句 DISABLE_DATABASE_ENVIRONMENT_CHECK=1
然后
RAILS_ENV=production bundle exec rails s
這個(gè)是啟用rails的夕吻,退了也一樣正常使用。
終于大功告成~開香檳慶祝繁仁!