Category Archives: rails

faraday zendesk

class ZendeskClient
  def initialize(user_id, api_token)
    @client = Faraday.new(:url => CONFIG_ZENDESK_URL) do |conn|
      conn.request :json // headerにapplication/jsonを入れる
      conn.adapter Faraday.default_adapter
      conn.response :json, :content_type => /\bjson$/
      conn.basic_auth("#{user_id}/token", api_token)
    end
  end

  def get_zendesk_custom_field_master
    zendesk_custom_field_master = {}
    res = @client.get "/api/v2/ticket_fields.json"
    zendesk_fields = res.body["ticket_fields"]
    zendesk_fields.each do |zendesk_field|
      zendesk_custom_field_master.store(zendesk_field["title"], zendesk_field["id"])
    end
    zendesk_custom_field_master
  end

model reference リレーション

User

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.timestamps
    end
  end
end

Comment

class CreateComments < ActiveRecord::Migration[5.0]
  def change
    create_table :comments do |t|
      t.text :text
      t.references :user, index: true, foreign_key: true
      t.timestamps
    end
  end
end

確認

レコード生成後、mysqlブラウザでリレーションが貼られていることを確認できる

user = User.create
user.comments.create

rails c -e production

production環境でのrails c
以下の方法だとclassのname エラーがでない

DISABLE_SPRING=1 rails c -e production

以下のようにdevelopmentとproductionの両環境が起動するのを防ぐ


``` 1966622764 34984 34636 0 12:33PM ?? 0:03.89 spring app | rails-test2 | started 16 mins ago | development mode 1966622764 35103 34636 0 12:33PM ?? 0:04.36 spring app | rails-test2 | started 15 mins ago | production mode 1966622764 34636 1 0 12:31PM ttys001 0:00.67 spring server | rails-test2 | started 17 mins ago ```

form_for でモデルにないプロパティを使う場合

model

class Club < ApplicationRecord
has_many :contents, class_name: ‘ClubContent’

// form_forでネスト先を呼び出せる
accepts_nested_attributes_for :contents, allow_destroy: true

// モデルに存在しないプロパティを使えるように設定
attr_accessor :user_ids
end

new.html.haml

%h2 clubs#new
= form_for @club do |f|
  %table
    %tr
      = f.fields_for :contents do |content|
        %td
          = content.label :部活名
        %td
          = content.text_field :部活名
    %tr
      %td 部員
      %td
        = f.select :user_ids, @users.map{|u| [u.氏名, u.id]}, { include_blank: true }, { class: 'chosen-select', multiple: true }
  = f.submit

リレーション先のレコードも合わせて作成

モデル

class Club < ApplicationRecord
  has_many :joining_clubs
  has_many :users, through: :joining_clubs
  accepts_nested_attributes_for :users
end

作成

// リレーション先のusersも合わせて作成できる
club = Club.create({"名前_漢字"=>"テスト部","users_attributes"=>[{"氏名"=>"みやもと"}]})

// 確認 usersを確認できる
club.users

AJAX 検索

gem install

gem 'ransack'

コントローラー

class ClubsController < ApplicationController
  def index
    @q = Club.ransack(search_params)
    if params[:q]
      @clubs = @q.result
    else
      @clubs = []
    end
  end

view

views/club/index.html.haml

%h2 clubs#index
= search_form_for(@q, remote:true) do |f|
  = f.label "部活名"
  = f.text_field :名前_漢字_cont
  = f.submit

#clubs
  - if @clubs.count > 0
    = render partial: "club", :collection => @clubs

= link_to "create club", new_club_path

views/club/index.js.haml

$('#clubs').html("#{escape_javascript(render partial: 'club', :collection => @clubs)}")

views/club/_club.html.haml

Elastic Beanstalk rails

アプリケーション作成(AWS管理画面)

EC2(ウェブサーバー)

  • プラットフォーム
    ruby
  • 環境タイプ
    オートスケーリング
  • 環境名
    任意に設定
  • この環境でRDSインスタンスを作成する
    チェックを入れる
  • インスタンスタイプ
    m1.medium

RDS

RDSも同時に作成する
* dbタイプ
mysql
* インスタンスクラス
t1.micro

手順

railsアプリ作成

  • アプリ作成
rails new {アプリ名} -d mysql
  • database.yml修正
production:
  adapter: mysql2
  encoding: utf8
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

IAM作成

以下を発番
1. アクセスキー
2. シークレットアクセスキー

ebコマンド

コマンド一覧
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb3-cmd-commands.html#eb3-cmd-options

// eb clientインストール
brew install awsebcli
eb --version

// アプリケーション作成
eb init // アプリケーション新規作成を選択。アクセスキー、シークレットアクセスキーを入力。 .elasticbeanstalkフォルダが作成される

// 環境作成 secret_key_baseも設定する
eb create {環境名}

// もしくは、下記(secret_keyも同時に設定できる)
eb create {環境名} --envvars SECRET_KEY_BASE=`rake secret`

// シークレットキー確認
// 設定状況を確認。 secret_keyが設定されていることを確認できる
eb printenv

// keyが設定されていない場合は以下で設定可能
eb setenv SECRET_KEY_BASE=`bundle exec rake secret`
eb printenv // secret_key_baseが設定されていることを確認できる

AWS管理画面

参考
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/java-rds.html

  • アプリケーション、環境が作成されていることを確認
  • RDS作成
  • RDSコントロールグループ設定変更
    my ip or 0.0.0.0/0
    を追加する。

  • 再度デプロイ

// secret_key設定後再度、デプロイ。DBやテーブルが作成される
eb deploy

mysql 接続

mysql -h {管理画面から確認したエンドポイント} -P 3306 -u {設定したID} -p {設定したパスワード}

ssh接続

appのフォルダに移動して、rails cもできる

参考

http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html