credentials.yml.enc
rails5.2からsecrets.ymlの代わりに導入された。
credentials.yml.encはgitに共有されるが、master.keyは.gitignoreに最初から追加されている。
master.keyがあれば以下のコマンドでdecodeして編集できる。
EDITOR=vim bin/rails credentials:edit
git等で環境を引っ張ってきた場合には、上記のコマンド時にmaster.keyが新規に作成されてしまう。これはcredentials.yml.encが作成された時のキーとは違うため、credentialsをデコードできない。
自動デプロイ
capistrano 参照
エラー対策
uglifier
JavaScriptを軽量化するためのgem。
テンプレートリテラル等の新しい記法を用いているとコンパイル時にエラーがでる。
(特に自動デプロイ時)
config/environments/production.rb の下記の設定をコメントアウトする。
config.assets.js_compressor = :uglifier
↓
# config.assets.js_compressor = :uglifier
ちなみにエラーを起こさせると以下のように怒られる。
rake stderr: rake aborted!
Uglifier::Error: Unexpected character '`'
デバッグ
mysqlの起動の確認と起動
sudo service mysqld status
sudo service mysqld start
mysql.sockのパス指定
railsとMySQLサーバーのやり取りは、ソケットファイルを通じて行われる。
$ mysql_config --socket
# 下記のようにmysql.sockがどのディレクトリに存在しているかが出力される
/var/lib/mysql/mysql.sock
config/database.yml
production:
<<: *default
database: ~~~(それぞれのアプリケーション名によって異なっています。こちらは編集しないでください)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
# socket: に続く部分を先ほど調べたパスに置き換える
socket: /var/lib/mysql/mysql.sock
cannot allocate memory ~
# rootユーザーへ変更する
$ sudo su -
# ダーティー・キャッシュをディスクに落とし込む
$ sync
# ページキャッシュおよびディレクトリエントリー(dentry) とinode のクリア
$ echo 3 > /proc/sys/vm/drop_caches
nginx 403 Forbiden
ログの確認
cat log/nginx.error.log
13 permission deniedの場合、nginxの設定変更へ
sudo vi /etc/nginx/nginx.conf
userに関する記述を、下記のように変更
user ユーザー名;
worker_processes 1;
自動デプロイ時みmigrateで失敗
マイグレーションの実行履歴から該当ファイルを削除
デプロイ時に設定変更が反映されない。
unicornをkillできていない可能性があるため手動でkillしてから再度デプロイする。
アクセスできない we are sorry~~
UnicornとNginxを再起動してみる
sudo service nginx reload
css, javaが反映されない
project階層で以下を実行
rake assets:precompile RAILS_ENV=production
画像の読み込みがうまくいかない
public/images以下に設置した画像はコンパイルされないため、本番環境にデプロイしてもパスが変わらない。
一方、assets/images以下に保存した情報はコンパイル時に参照先が変化する。この影響で画像を読み込めない場合がある。
このため必要な画像はpublic/images以下に設置する。
production.logに何も出力されない
railsアプリケーションをherokuにデプロイする際には、rails_12factorgemを導入する必要あり。
CSS・Javascriprなどのassetsとアプリケーションのlogの出力先をheroku用に整えるgem。
herokuからAWSへとデプロイ先を切り替える場合は、このgemをGemfileから削除。
gemfileから削除してbundle install
tail -f
ファイルの変更をリアルタイムで反映して表示する
tail -f log/production.log
mySQL
mysql.server start
が実行されると.socketファイルを読みに行く。
過去にmysqlをインストールしていたりするとこの位置が違ってエラーがでる可能性あり。
MySQLの設定ファイルであるmy.cnfを作って、今から使う設定をそこに書き込む
(+ エラーが吐かれるようにエラーログを記録するディレクトリ等も書き込む)
上記で指定したファイルには、書き込みが可能な権限を与える
/etc/my.cnfの位置にmySQLの設定ファイルであるmy.confを作成する。
中身は以下のようにする。
[mysqld]
socket = /tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
ログが出力されるファイルを作成する。
sudo touch /var/log/mysqld.log
権限の変更をする。
sudo chown ユーザー名:wheel /var/log/mysqld.log
※sudo する権限のあるグループはwheel という名前にする(ただの慣習)
usr/local/binなどあたりにpidファイルを生成しようとするも権限が無くできない
sudo chmod ユーザー名:wheel /private
エラーログが書けない。
$sudo chmod 755 /var/log
socketファイルが書けない(生成できない)
$sudo chmod 755 /tmp
mysqlをbrewで入れて、my.confを作ってない場合、
以下でエラーログを確認できる。
less /usr/local/var/mysql/`hostname`.err
mySQLのソフトウェアとデータのバージョン違い
通常インストールすると5.7が、指定すれば5.6等の他バージョンを使える。
brew uninstall mysql, brew install mysql56
などとすればソフトウェアのバージョンを切り替えることができるが、データのバージョンまでは変わらない。ここでエラーとなる場合がある。
/usr/local/var/mysqlを削除すればデータの削除となる。
sudo rm -rf /usr/local/var/mysql
mysqlの起動に関するファイルの権限が違う場合
所有者権限を確認。
ls -la /usr/local/var/mysql
ファイルの権限がユーザーと違っていれば書き換える。
sudo chown -R $(whoami):admin /usr/local/var/mysql
コメント