ECのウェブ担当者のメモ

ECサイトを運営管理している、WEB担当プログラマのメモ

スポンサーリンク

Capistranoを使ってRailsのAssetsファイルの出力先を変更する

f:id:jun9632:20160322161458p:plain

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の設定の方は、 「/」 始まりでないので注意してください。

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

参考サイト

railsguides.jp

Postgresqlでdrop databaseしたら怒られた。

f:id:jun9632:20160318191936p:plain

タイトルの通り、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';

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

参考サイト

stackoverflow.com

Rubyで数値の下N桁を取得する方法

f:id:jun9632:20160315195906p:plain

例えば、123456789の下 3桁を取得したい場合

以下の様にすれば良いらしい。

> 123456789 % 1000

=> 789

割ってあまりを出す感じです。

割る数字の0の数が結果の桁数になります。

10 => 1桁 : 9
100 => 2桁 : 89
1000 => 3桁 : 789
10000 => 4桁 : 6789
100000 => 5桁 : 56789

というような感じです。

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

プログラミング言語 Ruby

プログラミング言語 Ruby

  • 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/01/26
  • メディア: 大型本
  • 購入: 21人 クリック: 356回
  • この商品を含むブログ (129件) を見る

Rails4のhas_manyのorderの書き方について

f:id:jun9632:20160315164233p:plain

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')}

参考サイト

stackoverflow.com

qiita.com

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

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'
    });

  });

完成イメージ

f:id:jun9632:20160310234452p:plain

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

UIまで手の回らないプログラマのためのBootstrap 3実用ガイド

UIまで手の回らないプログラマのためのBootstrap 3実用ガイド

参考サイト

github.com

Ruby on RailsのViewとControllerで共通で使えるメソッドの設定方法

f:id:jun9632:20160310094136p:plain

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

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック

実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック

Railsの複数項目でユニークチェックのバリデーションする方法

f:id:jun9632:20160311174604p:plain

Ruby on Railsの Activerecordのバリデーションで、 複数項目でユニークチェックする方法です。

今回のサンプルでは、仮にcodeuser_idの 2項目でユニーク制約をかけています。

書き方

書き方は以下の通りです。

validates :code,
      presence: true,
      uniqueness: {scope: [:user_id]}

uniquenessにscopeで項目を指定します。

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

たのしいRuby 第5版

たのしいRuby 第5版