DesignAssembler

備忘録に近い

Ruby

rake db:resetとrake db:migrate:reset

タイトルの2つのrakeコマンドについてです。 どちらもdbを一旦dropします。 rake db:resetはまずdropしてそのあとschema.rbに従ってdbを再構築します。 それに対し、rake db:migrate:resetはdropしたあとマイグレーションファイルを読み込んでschema.rbを更…

config.ruについて

configディレクトリに入ろうとしてタブ補完する時凄く邪魔なconfig.ruについてです。 config.ruを見てみるとこのように書いてあります。 # This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/envir…

Railsのポリモーフィック

ポリモーフィック ポリモーフィックは子が複数の親に属していて、かつ全てが同じ関係性の場合に使います。 関連が多くなると、◯◯_idを書くのが手間です。 ポリモーフィックを実装するとこれを書かなくて良くなり、DRYを保てます。 railsでの実装 railsでは各…

secret_key_baseとは

secret_key_baseについてです。 railsがこんなエラーを吐くことがあります。 ERROR RuntimeError: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` secret_key_baseの設定をしろと言…

CapistranoでAWS(nginx+unicorn)にデプロイ

Capistrano Ruby製のデプロイツールです。 編集したファイル アプリケーション側 Gemfile Capfile lib/capistrano/tasks/unicorn.rake config/deploy/production.rb config/deploy.rb サーバー側 /etc/nginx/conf.d/myapp.conf 実際の編集は以下のサイトを参…

ChefでAWSにRails+nginx+unicornのサーバーを立てる

環境構築の続きです hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com やること chefで、railsをnginx+unicornの環境構築をします。 rails、unicornのインストール cookbooks/ruby_on…

Sidekiq

resqueやdelayed_jobのような非同期実行を実現するgem redisが必要、redisはジョブの管理に使われている。 インストールはgem ‘sidekiq’でいい ActiveJob(Rails 4.2で実装された) (http://qiita.com/ryohashimoto/items/2f8fd685920a5318def4) (http://rails…

Rubyのスコープ

スコープ スコープとは、変数の見える範囲のことです。 普通にプログラムを書いてると分かると思います。 module ModuleScope class ClassScope1 def self.method_scope1 var1 = 1 #var1はローカル変数 end def self.method_scope2 @var2 = 2 #@var2はインス…

Rubyのアクセサメソッド

ゲッターとセッター オブジェクト指向においてカプセル化という技術があります。 これはオブジェクトの変数への、外部クラスやメソッドからの直接アクセスを遮断することです。 ただ、遮断したままだと使えないのでその変数の値を返すゲッターメソッドとその…

Rubyのブロック

メタプログラミングRubyを読んでいます。 第3章の記事です。 ブロック 「呼び出し可能オブジェクト」の1つで、スコープを制御します ブロックはオブジェクト指向ではなく関数型プログラミング言語の流れを汲んでいます やること ブロックの基本 スコープの概…

Rubyの定数

メタプログラミングRubyを読んでます。 定数 大文字で始まる参照は、クラス名やモジュール名も含めて全て定数です。 定数はディレクトリの階層のような木構造で並んでいるので、MyModule::MyClass::MyConstantのようにパスを使って指定します。 外部の定数を…

Rubyのオープンクラス

オープンクラス Rubyには定義済みクラスに新しくメソッドを追加する機能があります。これをオープンクラスと言います。 継承やミックスインをせずにクラスを拡張できます。 また、既存のメソッドを上書きすることをモンキーパッチと言います。 class Fixnum …

Railsの単一テーブル継承

単一テーブル継承(STI)とは 普通は複数のテーブルが必要になる関連したテーブルを1つのテーブルにまとめる事です。 db構造が簡単になりDRYになります。 例えば、JapaneseテーブルとAmericanテーブルがあったとして、JapaneseテーブルとAmericanテーブルをRac…

キーワード引数(Ruby)

キーワード引数 Ruby2.0からキーワード引数が導入されました。 こんなコードです def keyword_func(key:) puts key end > keyword_func(key: "value") value > keyword_func(key: 1) 1 > keyword_func(key: {key1: 1, key2: 2}) {key1: 1, key2: 2} > keywor…

スキーマについて

スキーマとは データベースにおいてデータ型やデータ構造を示したものです。 railsでの使われ方 Rails(ActiveRecord)では、マイグレーションによってスキーマが作成されます。スキーマがあることによりデータベースに依存せず一貫したテーブルを構築すること…

Rubyのselfについて

メソッド名にselfをつけるとクラスから直接メソッドを呼ぶことができます。 つまりクラスメソッドとして扱います。 メソッド名にselfをつけないと指定したオブジェクト(レシーバ)に対してしかそのメソッドを使うことができません。 つまりインスタンスメソッ…

gem作ってRailsで使う

bundlerでgem作ってrailsで読み込みました。 作るgemの機能は、引数に’foo’と与えると’bar’を返すというだけです。 gem作成 $ bundle gem test_gem lib/test_gem.rbに欲しい機能のメソッドを書きます。 こんな感じです。 require "test_gem/version" module …

MySQLのenumとRailsのenum

enumとは enumとは列挙型の事です。 定数を名前空間でまとめたものと自分は認識してます。 ほとんどの場合enumは可視性のために使われます。 定数でも同じ機能は実装できるのですが(実装だけなら定数の方が楽)、コードを書くと何を使ってるのか分かりにくく…

Rubyのクラスとモジュールについて

Rubyのクラスとモジュールについて、参考リンクを載せながら説明します。 どんな時にモジュールが使われるか インスタンス化せずにメソッドを格納したいときや、関連するクラスをまとめたいとき、つまり名前空間として使いたいときモジュールを使います。例…

bundlerとGemfile.lockの取り扱い

bundlerの役割 bundlerは複数人で同じアプリケーションを動かす時に、gemのバージョン差異で悩まされないように作られました。 このbundlerにより生成されるGemfileとGemfile.lockがあれば他の人と同じ環境を構築できます。 GemfileとGemfile.lock Gemfileは…

ActionMailerで環境を判別してメール送信前にsubjectやtoを変更する

Railsから簡単にメールを送信できるActionMailerについてです。概要Railsアプリケーションからメールを送る際、production以外の環境ではメールの宛先や件名を変えたい時の構築方法です。 ここではgmailを使用してメールを送信します。記事書いたらただただA…

rails sが通らない

rails sを打つと以下のエラーが出ました。 `bind': Address already in use - bind(2) for 0.0.0.0:3000 3000番ポート使われてるみたいです。1.立ち上がってる別のrailsサーバーを落とす以下のコマンドで立ち上がってるrubyプロセスを確認してください。 $ p…

public以下の静的ファイルにルーティングを通す

デザイナーからもらった静的ファイル、組み込むのだるいしpublicに置きたい。でもルーティングは通したい。そんな時のためのメモです。例 public/about.htmlにtop#aboutとルーティングしたいやり方 topコントローラーにaboutアクションを追加して以下のよう…

rails環境構築小メモ

自分用のメモvagrantのcentosでの環境構築のメモがなかったので作っておく以下でvagrantにアクセスする $ cd Vagrant $ vagrant up $ vagrant ssh rubyのインストールはこんな感じ $ rvm install ruby-2.1.6 railsが無いと言われたら $ gem install rails bu…

サブドメインでアクセスした時にデータベースを切り替える(rails)

ステージングをサブドメインに設定して(staging.*****.jp)そのアドレスの時接続データベースを切り替える方法です。環境・EC2(CentOS) ・RDS(MySQL) ・ムームードメイン前提 ムームードメインでドメイン取得済み route53でドメイン設定済み 流れ・ムームード…

AssetPipelineでcssに画像指定

またもやAssetPipelineにやられてました。症状cssに記述した画像がrailsで表示されなくなったclobberしてprecompileしたら表示されなくなりました。該当部分はpage.css.scssというファイルに以下のように記述されていました。 .frame #title{ height:91px; b…

railsでMySQLのレコードの日本語が16進数で表示されてしまう。

railsでmysqlを使った際にレコード内の日本語が16進数(hex)で表示されてしまう問題です。環境 Amazon Linux AMI release 2015.03 (EC2) MySQL5.6 (RDS) nginx version: nginx/1.6.2 unicorn v4.9.0 Rails 4.2.0 ruby 2.2.2p95 (2015-04-13 revision 50295) […

Railsで連動プルダウン(Ajax)

RailsでAjaxを用いた連動プルダウンの実装です。前回の記事を改良して、Ajaxで2つのセレクトボックスを連動させます。 モデルの作成前回のBookモデルに関連付けられたFieldモデルを作成します。 $ rails g model Field book_id:integer name:string リレーシ…

RailsでAjaxを使う

RailsのセレクトボックスでAjaxを使いました。もうハマらないようにメモです。だいたいの仕組みセレクトボックスから項目を選ぶ jQueryでセレクトボックスの変化を検出 Ajaxリクエストを飛ばす 指定したhtmlを表示させる(jQueryとパーシャルによる)コード早…

CSSが適用されない(AssetPipeline)

production環境でcssとjsが適用されません。プリコンパイルしてアクセスしてページのソースを表示すると生成されたcssは読み込まれていますが、jsが Uncaught TypeError: t.widget is not a function (とその他)を吐いています。jQuery UI TypeError: e.widg…