Capistranoを使ってRailsのAssetsファイルの出力先を変更する
Ruby on RailsでAssetes ファイルをコンパイルするとデフォルトでは public/assets ディレクトリにコンパイルされたファイルが出力されます。 それを別のディレクトリに変更する場合の方法です。
そもそもなんで変更したいの?
私の遭遇したケースとしては、フロントと管理画面のアプリを同じサーバーで動かしたく、 Nginxの設定で以下のようにして、
location ^~ /admin/ { (略) proxy_pass http://admin_server; break; }
http://www.example.com/admin/ のリクエストをすべて、 管理画面側のソースを見るようにしたかったからです。 当然、cssやjsのassetsファイルも管理画面のソースをみて欲しかったので、
<script src="/admin/assets/application-27071e7192124c5d0f0cf003xxxxxxxxxxxxxxxxb1ce458f71db88cf.js">
のようになるようにすることを目的としています。
設定方法
設定方法は比較的簡単で、以下のとおりです。
config.assets.prefix
config/application.rbに以下を追加します。
config.assets.prefix = '/admin/assets'
もともとのデフォルトの設定は、以下です。
config.assets.prefix = "/assets"
Capistrano
また、Capistranoを使って、Production 環境にもassets.prefixの変更を反映させるためには config/deploy.rbに以下の設定も追加する必要があります。
set :linked_dirs, %w{(略) public/admin/assets} set :assets_prefix, 'admin/assets'
ハマった点として、
config.assets.prefixは 「/」 始まりですが、 Capistranoの設定の方は、 「/」 始まりでないので注意してください。
関連記事
チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)
- 作者: 池田尚史,藤倉和明,井上史彰
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
参考サイト
Postgresqlでdrop databaseしたら怒られた。
タイトルの通り、Postgresqlでdrop databaseしたら以下のメッセージとともに怒られました。
There are 2 other sessions using the database.
他のだれかが使っているから削除できない的なメッセージだと思います。
そんなときは、以下の用にpidをkillすれば良いようです。
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND datname = 'db_name';
関連記事
内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)
- 作者: 勝俣智成,佐伯昌樹,原田登志
- 出版社/メーカー: 技術評論社
- 発売日: 2014/09/04
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
参考サイト
Rubyで数値の下N桁を取得する方法
例えば、123456789の下 3桁を取得したい場合
以下の様にすれば良いらしい。
> 123456789 % 1000 => 789
割ってあまりを出す感じです。
割る数字の0の数が結果の桁数になります。
10 => 1桁 : 9 100 => 2桁 : 89 1000 => 3桁 : 789 10000 => 4桁 : 6789 100000 => 5桁 : 56789
というような感じです。
関連記事
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 356回
- この商品を含むブログ (129件) を見る
Rails4のhas_manyのorderの書き方について
Rails4のhas_manyで 1対多 や 多対多のレコードを取得するときに、Orderをかけながら取得しようと思って 以下のように書いたら
has_many :items, order: 'id'
以下の様に怒られました。
Unknown key: :order. Valid keys are: :class_name, :anonymous_class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type
orderなんてkeyは無いぞ!といわれている様子です。
そんな時は、以下のように書かないと行けないらしい
has_many :order_items, ->{order('id')}
参考サイト
関連記事
Rails4 ビギナーズガイド: MVCアーキテクチャをマスターせよ! PRIMERシリーズ (libroブックス)
- 作者: 掌田津耶乃
- 出版社/メーカー: Tuyano-Project
- 発売日: 2016/02/21
- メディア: Kindle版
- この商品を含むブログを見る
RailsにBootstrap Datetimepickerを設定する
Datetimepickerって結局どれ使ったらいいのかよくわからず、 jquery UIのDatePickerとか試してみましたが、 見た目のデザインと簡単に設定できる感じから Bootstrap Datetimepickerが良いんじゃないかと思っています。
今回、あまり細かな設定はしていませんが、 Ruby on Railsに導入する方法です。
Gemfile
Gemfileに以下を追加して、bundle install
gem 'momentjs-rails' gem 'bootstrap3-datetimepicker-rails'
application.js
assets/javascripts/application.jsに以下を追加します。
//= require moment //= require moment/ja //= require bootstrap-datetimepicker
application.scss
assets/stylesheets/application.scssに以下を追加します。
@import 'bootstrap-datetimepicker';
aaa.html.slim
ビューで以下のように設定します。
.form-group = f.label :birthday = f.text_field :birthday, class: 'form-control', pattern: '\d{4}/\d{1,2}/\d{1,2}' javascript: $(function () { $("#birthday").datetimepicker({ format: 'YYYY/MM/DD', locale: 'ja' }); });
完成イメージ
関連記事
UIまで手の回らないプログラマのためのBootstrap 3実用ガイド
- 作者: 大澤文孝
- 出版社/メーカー: 翔泳社
- 発売日: 2014/07/15
- メディア: 大型本
- この商品を含むブログ (1件) を見る
参考サイト
Ruby on RailsのViewとControllerで共通で使えるメソッドの設定方法
Controllerで作ったメソッドをView側でも使い時ってありあすよね?
そんな時は、helper_methodです。
書き方
実装方法は以下の様になります。
helper_methodに設定したいメソッド名を渡してあげれば、コントローラーでもビューでも使うことができます。
xxxxx_controller.rb
helper_method :common_method? def common_method? return true end
xxxx.html.slim
- if common_method? | true - else | false
参考サイト
http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method
関連記事
実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック
- 作者: Brad Ediger,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/10/27
- メディア: 大型本
- 購入: 7人 クリック: 90回
- この商品を含むブログ (43件) を見る
Railsの複数項目でユニークチェックのバリデーションする方法
Ruby on Railsの Activerecordのバリデーションで、 複数項目でユニークチェックする方法です。
今回のサンプルでは、仮にcodeとuser_idの 2項目でユニーク制約をかけています。
書き方
書き方は以下の通りです。
validates :code, presence: true, uniqueness: {scope: [:user_id]}
uniquenessにscopeで項目を指定します。
関連記事
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る