自分用メモ
Autoloadの廃止
こんな感じのautoloadがproduction環境では動作しなくなる。。。
config.autoload_paths += Dir["#{config.root}/lib/**/"]
自分用メモ
こんな感じのautoloadがproduction環境では動作しなくなる。。。
config.autoload_paths += Dir["#{config.root}/lib/**/"]
自分用メモ。
そもそもアセットパイプラインのプリコンパイルとは?
プリコンパイルは、複数のファイルをいっこにまとめて、圧縮して、ファイル名にフィンガープリント(ダイジェスト)をつけて、公開ディレクトリにデプロイする、などの作業と解釈してます。
プリコンパイルされていないアセットは、production環境では見ることができません。配信したいアセットがプリコンパイルの対象になっていることを確認する必要があります。
by Rails Asset Pipelineがうまくいかないときの問題の切り分けかた
自分が思っているProduction環境でのアセットパイプラインの流れ
1)コンパイル対象のファイル(デフォルトだとapplication.jsとapplication.css)を追加
追加することでパイプラインで生成されるファイルを増やすことができる。
2)アセット対象のパスを追加
追加することでコンパイル対象ファイル内に記述することができる。
3)パイプラインから生成されたファイルをstylesheet_link_tagやjavascript_include_tagで読み込む
config/initializers/assets.rb内
Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "images") Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "stylesheets") Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "javascripts")
Rails.application.config.assets.precompile += %w( user.js admin.js user.css admin.css )
外部ライブラリのCSSファイル内で相対パスで書いてある場合、Production環境だと
CSSがapplication.cssに集約されるため、フォントが読み込めなくなる。
その場合は、「絶対パス」に変更するなどの対応が必要になる。
$ bundle exec rake assets:clobber
$ bundle exec spring rails c $> Rails.application.config.assets.paths
$ bundle exec spring rails c $> Rails.application.config.assets.prefix
以下参照。
[Ruby入門 Rails5編] 05. アセットパイプラインでフロントエンドのリソースを管理する
[参考]
Rails Asset Pipelineがうまくいかないときの問題の切り分けかた
【備忘録】nginx, Rails連携時にassets配下のファイルにアクセスできない場合の解決方法
自分用メモ。
1)環境変数の設定
以下の環境変数を「.bashrc」に設定。※Capistranoで読み込む環境変数の場合、.bash_profileだと読み込んでくれないため。
以下の詳細。
thoames.hatenadiary.jp
①RAILS_ENV(設定しておけば、コマンドで逐一入れなくても良くなる)
②DATABASE_PASSWORD(production環境のDBに接続するためのパスワード)
③SECRET_KEY_BASE(秘密鍵の設定)
2)assets:precompileの設定
5.1からyarnが必須になったっぽい。
npmをインストールし、yarnを以下のようにインストールすれば良い。
$ npm install yarn -g
3)config/environments/production.rbの設定
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
を
config.public_file_server.enabled = true
に変更
[参考]
Rails5でnginx+pumaでproduction環境を構築する · atwata developer blog
自分用メモ。
環境変数を「.bash_profile」に設定した場合
読み込まれなかったため、原因を検索してみたら以下の記事がひかかった。
Capistrano で.bash_profileに書いてある環境変数が読まれない件
ruby on rails - Capistrano and environment variables - Stack Overflow
どうやらCapistranoは.bash_profileは読み込ま長い、.bashrcは読み込むらしい。
ただ注意しないといけないのは、以下の行より「上」に環境変数を設定しないといけないこと。
# If not running interactively, don't do anything [ -z "$PS1" ] && return
話は変わるが、以下のようにCapistrano自体に環境変数の設定をすることも可能っぽい。
set :default_environment, { 'env_var1' => 'value1', 'env_var2' => 'value2' }
またデバックとして、「require 'capistrano/console'」をCapfileに入れることで
以下のコマンドが使用でき、Capistranoと同じ条件で、サーバに入ることができる。
例)production環境に入る例
$ bundle exec cap production console
Imagemagickはコマンドラインから画像の操作や表示ができるツール。
多くのOS及び言語から使用できるため人気がある。
RMagickはRuby用のImagemagickインターフェース。
RubyからImagemagickを使用する場合は、このgemをインストールする。
RMagickはimagemagickのバージョン6にしか対応していないので
バージョン6をインストール。
$ brew install imagemagick@6
パスを.bash_profileに設定
export PATH="/usr/local/opt/imagemagick@6/bin:$PATH"
$ source ~/.bash_profile
以下のコマンドでバージョン情報が表示されれば、インストール完了
$ convert --version
インストール
gem 'carrierwave' gem 'rmagick'
このままインストールすると、以下のエラーが出てインストールできない。
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
MagickCore.pcが含まれるパスであるPKG_CONFIG_PATHを
環境変数に設定する必要がある。
.bash_profile
export PKG_CONFIG_PATH="/usr/local/opt/imagemagick@6/lib/pkgconfig:$PATH"
$ source ./bash_profile
インストール
$ bundle install
[参考]
Macにrmagickをインストールする - Qiita
RMagickのインストールでエラー - Qiita
自分用メモ。
以前はansible.cfgを「/usr/local/bin/ansible/ansible.cfg」に置いており、
「/usr/local/bin/ansible/」内に「apps」ディレクトリを作成し、
さらにその中に各プロジェクトのディレクトリを作成し、プレイブックをその中に置いていた。
こんなイメージ
├── apps │ └── project1 │ ├── hosts │ │ ├── production │ │ └── staging │ ├── log │ │ └── ansible.log │ └── playbook │ ├── dbservers.yml │ ├── group_vars │ │ ├── production.yml │ │ └── staging.yml │ ├── roles ├── ansible.cfg
実行するときは、各プロジェクト内に移動し、その後にプレイブックをのコマンドを叩いていた。
例)
$ cd apps/project1 && ansible-playbook -i hosts/staging playbook/site.yml
以前(バージョンは忘れた・・・2.2とかだった気がする)は、上記の構成とコマンドでansible.cfg内の設定を
読み込んでくれていたが、バージョンを2.5.3に上げたら、読み込まなくなりansible.cfg内で設定していたremote_userが効かなくなったため
サーバにSSHログインできなくなった。
公式ドキュメントを見ると、以下の順でansible.cfgは読み込まれる。
① ANSIBLE_CONFIG (environment variable if set)
② ansible.cfg (in the current directory)
③ ~/.ansible.cfg (in the home directory)
④ /etc/ansible/ansible.cfg
Ansible Configuration Settings — Ansible Documentation
このドキュメントを見ると、そもそもプロジェクトのフォルダに移動して、コマンドを実行してもansible.cfgは読み込まれないように見えるが
以前のバージョンでは動作していた。。。
なので、ansible.cfgを各プロジェクト内直下に置き、実行してみたところ動作した。
以下がその構成。
├── apps │ └── project1 │ ├── ansible.cfg │ ├── hosts │ │ ├── production │ │ └── staging │ ├── log │ │ └── ansible.log │ └── playbook │ ├── dbservers.yml │ ├── group_vars │ │ ├── production.yml │ │ └── staging.yml │ ├── roles
表題のとおりだが、
今まで動いていたAnsibleが以下のエラーを吐くようになった。
dyld: Library not loaded: @executable_path/../.Python Referenced from: /usr/local/Cellar/ansible/2.5.2/libexec/bin/python2.7 Reason: image not found
いろんなサイトを見ると、よくわからないがリンクが切れたどうだとかの
書いてあったので、ansibleをアンインストールし
$ brew uninstall ansible
再インストールしたら直った。
$ brew install ansible