本日で応用カリキュラムを終えました。2日前倒し。
スケジュール的には多分1週間程度の前倒しをして欲しそうだけど、事前学習をみっちりやってる人じゃないと無理っぽい。もしくはカリキュラムをなぞるだけでパーっと進んじゃう人か、もともと多少なりとも経験のある人。
私の場合はこの34日間のうち、休んだのは5日ほど。加えて基礎カリキュラムが終わった段階でカリキュラムを無視して自分用のスクレイピング機能を作ったりして5日くらい無駄にしているので余裕は10日分ほどしかない。理解がゆっくりな人だと終わらないんじゃないかな。
あと私は連日10〜12時間程度を勉強に当てていたけど、8時間程度なら毎日欠かさずやってもギリギリな気がする。そういう意味では渋谷に家を借りて正解だった。
ということで今日はやることがなくなったので17時にはサヨウナラ。
明日以降は個人アプリ開発なのでTECHの教室にいる意味もないし出席しません。
盆休みも終わって宿や道路も空くだろうし、台風も過ぎ去るので旅に出ようかな。
重要なことですが、この期日までに指定のアプリを仕上げないと就職補償を受けられないそうです。私は就職はどうでもいいですが、人によってはやめるか続けるかの岐路に立たされるかもしれない。
rails
timezoneの変更
通常はrailsの表示はutcで、データベースの書き込みもutcで行われる。
表示のみjstにするか、データベースをjstにするかでやり方が変わる。
基本的な考え方は、railsの表示時間とDBに保存する時間の2つ。
加えてDBからviewに出力する際にrailsの表示時間と異なる場合に変換をかませるか。
ここに注意しておけばOK。
db: utc 表示: jst
config/application.rb
config.time_zone = 'Tokyo'
config.active_record.default_timezone = :utc
active_record.defalult_timezoneは書かなくてもutcがデフォルトになる。
views/view.html.erb
created_at.in_time_zone('Tokyo')
in_time_zone(‘Tokyo’)をつけることで表示上+9時間してくれる。
データベースもjstへ変更する。
config/application.rb
config.active_record.default_timezone = :local
(ローカルがjstに設定されていること前提、サーバーがjstである必要あり)
time_zone変更時にデプロイでrake aborted!
requireと同レベルにconfig.time_zoneを書くと、
NameError: undefined local variable or method `config’ for main:Object
が出て困った。
正しくはmodule Projectの中に入れます。以下のように。
require_relative 'boot'
require 'rails/all'
Bundler.require(*Rails.groups)
module Project
class Application < Rails::Application
config.generators do |g|
g.stylesheets false
end
config.i18n.default_locale = :ja
config.time_zone = 'Tokyo'
end
end
ロードバランサ
ELB
Elastic Load Balancing
CLB(Classic Load Balancer)、ALB(Application Load Balancer)、NLB(Network Load Banancer)の3種類
ELBを使う時の注意点
ロードバランサによって最初に振り分けられたサーバと別のサーバに振り分けられると、そこで一連の流れが途切れてしまいまた最初からやり直しが必要だったりする。
- ELBを作成した後に”維持設定の編集”をクリック
- “ロードバランサーによって生成された Cookie の維持を有効化”を選択
- 設定情報を持つ秒数を入力
デバッグ
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
rails
enum
カラム名に対して設定する。
カラムはinteger型かboolean型のものが対象。
nationテーブルにprefectureカラムがある場合
enum prefecture: [:tokyo, :saitama, kanagawa]
enum prefecture: { tokyo: 5, saitama: 10, kanagawa: 3 }
[]で指定すると0から順にintが割り当てられる。
{}で渡すと番号も指定できる。ただし、自動追加はできない。
linux
psコマンド
オプション一覧
コメント