Date.today と Date.current の違い
Railsアプリで現在の日付を取得する時、Date.today
と Date.current
どっちでも取得できるが、違いが気になったので調べてみました。
まず大事なこととして、Railsアプリケーションでは「システムまたは環境変数に設定されたタイムゾーン」と「application.rbに設定されたタイムゾーン」の2種類があるらしい。
Date.today
Date.current
Date.current
は、application.rbのタイムゾーンを使う。
まとめ
環境変数を設定してDate.today
を使うよりも、application.rbにタイムゾーンの設定を書いてDate.current
を使った方が思いがけないミスが減りそうなので、Date.current
をなるべく使っていこうと思います。
参考
nginxとRailsを連携させる
こちら☝️の記事の続きになります。
やりたい事
nginxとpumaを連携させてRailsアプリを動かす。 動的ページはpumaから、静的ファイルはnginxから配信させる。
1. Pumaの設定
Rails(Puma)とNginxを連携させるために、Pumaの設定ファイルを修正します。
config/puma.rb
を以下のようにします。
# 以下の部分をコメントアウトします。 # port ENV.fetch("PORT") { 3000 } # 以下の3行を追加してください。 bind "unix://#{Rails.root}/tmp/sockets/puma.sock" daemonize true stdout_redirect "#{Rails.root}/log/stdout", "#{Rails.root}/log/stderr"
2. nginxの設定
私のサーバーでは、/etc/nginx/sites-available/配下に各サイトの設定ファイルがあるので、それに設定を記述していきます。
下記設定ファイルのbooks_app
は各自のフォルダ名に変えてください。
また、追記するところ以外は省略しているところもあるのでこのままコピペする事はお勧めしません。
各自の設定ファイルに書いてあった内容はなるべく消さずに追加するところだけを選んで自分の設定ファイルに追加してください。
upstream books_app { # 先ほどPumaの設定でbindの後に書いたものを追記してください。 server unix:///opt/books_app/tmp/sockets/puma.sock fail_timeout=0; } server { listen xx; server_name xxxxx; access_log /home/demo/public_html/xxxxx/log/access.log; error_log /home/demo/public_html/xxxxx/log/error.log; # rootとtry_filesの設定を追加してください↓ root /opt/books_app/public; try_files $uri/index.html $uri @books_app; # 下記locationの設定9行を追記してください location @books_app { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://books_app; } }
追記できたら、下記コマンドで設定ファイルのシンボリックリンクを作成します。
$ ln -s /etc/nginx/sites-available/books_app /etc/nginx/sites-enabled/books_app
3. サーバー起動
nginxの設定ファイルを再読込させます。
$ sudo nginx -s reload
nginxの再起動ができず、手こずったのですが、同じ状態になった方はこちらの記事↓が参考になるかもしれません。
他のプロセスがポートを占有してnginxを再起動できない - Qiita
Pumaを起動します。
$ bin/rails s -e production # 停止する場合 $ kill `cat tmp/pids/server.pid`
これで準備完了です!各自のドメインにアクセスしてみてください。
http://各自のドメイン/
Railsアプリが表示されるはずです。お疲れ様でした😄
参考
production環境でRailsアプリを立ち上げる
ローカルで開発していたRailsアプリをリモートサーバーに置いて、本番環境(production)環境で立ち上げました。
結構つまずいたので手順をまとめてみようと思います。
環境
- さくらVPS
- Debian 10.3
- postgresql 11.7
1. Githubからリポジトリをクローンする
リモートサーバーにRailsアプリのクローンを作成します。
「/opt」の下で、下記コマンドを実行してください。参考1、参考2
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
Githubの公式ページにクローン作成の詳細が書かれているので、必要に応じて確認してください。
Githubにローカルで開発していたアプリをpushしていない場合は、先にpushしてください。
2. アセットのプリコンパイル
production環境では必ず、プリコンパイルを実行する必要があります。
$ bin/rails assets:precompile
3. 静的ファイルの配信サーバを設定
本番環境では、静的ファイルの配信はNginxなどのWebサーバにやってもらうのが一般的なため、デフォルトでは設定ファイルconfig/environments/production.rb
にそのように書いてあります。
しかし今回は、Railsの用意している静的ファイルの配信機能を使うので、設定ファイルを修正する必要があります。
config/environments/production.rb
# コメントアウトする↓ # config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? # 追加する↓ config.public_file_server.enabled = true
4. production環境用のデータベースを作成する
development環境とtest環境のデータベースはSQLiteを使っていたのですが、production環境ではPostgresqlを使うように変更します。 OSにPostgreSQLをインストールしていない場合は、先にインストールしてください。
Gemfileに以下を追加します。
gem "pg"
インストールします。
$ bundle install
Postgresqlのユーザーを追加します。パスワードが求められるので、入力してください。
$ createuser -d -P ユーザー名
上記で入力したパスワードを、config/detabase.yml
で使えるように環境変数に入れる必要があります。
OSのファイル.bash_profile
に以下を追加します。BOOKS_APP_DATEBASE_PASSWORD
の所は各自変えてください。
~/.bash_profile
export BOOKS_APP_DATEBASE_PASSWORD=パスワード
記入したら以降のステップに進む前に設定ファイルを下記コマンドで再読み込みしてください。
$ source ~/.bash_profile
config/database.ymlを編集します。
default: &default # postgresqlに変更します↓ adapter: postgresql pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 # 先ほどcreateuserコマンドで作成したユーザー名を入力してください↓ username: ユーザー名 # 先ほど作った環境変数をセットします↓ password: <%= ENV['BOOK_APP_DATABASE_PASSWORD'] %> development: <<: *default database: books_app_development test: <<: *default database: books_app_test production: <<: *default # database名を アプリ名_productionに変更してください↓ database: books_app_production
準備が整いました。下記コマンドを実行して、データベースを作成してください。
$ RAILS_ENV=production bin/rails db:create db:migrate
5. config/master.keyを作成
production環境でアプリを動かすためにはconfig/master.key
ファイルが必要です。
しかし、そのファイルはGitの追跡範囲外なので、Githubからクローンを作成した場合
master.key
ファイルは含まれていないので作る必要があります。
リモートサーバーのRailsアプリにconfig/master.key
ファイルを作成してローカルのconfig/master.key
ファイルの内容をコピペしてください。
6. サーバーを起動
下記コマンドでサーバーを起動します。
$ bin/rails s -e production -b IPアドレス
これでページが表示されるはずです✨
http://IPアドレス:3000/
お疲れ様でした。何か間違いがあればお気軽にコメントください😄
続きの記事も書きましたので、よければご覧ください😊