Herokuに2台目のパソコンからデプロイする方法

普段はiMacで運営しているsinatraアプリをWindows10のラップトップパソコンからもデプロイする方法。
調べるときは「Heroku」「git」「 紐付ける」などで検索すると良い。
Rubyやgitをインストールしておく必要あり。

PowerShellからHerokuにログインする

環境によってはコマンドプロンプトやGit BASHを利用する。
PS C:\Users\name> heroku login

メルアドとパスワードを求められるので入力する

Enter your Heroku credentials:
Email: メルアド
Password: ************

Herokuからcloneする

PS C:\Users\name>heroku git:clone --app アプリ名

これでHerokuとgitが自動で紐づく
このとき、アプリ名のディレクトリがつくられる
一旦Heroku logout

アプリを更新する

ラップトップで更新したファイルをデプロイする

cdコマンドで新しくできたディレクトリに移動する

Heroku loginする

PS C:\Users\name\ディレクトリ名> git add .
PS C:\Users\name\ディレクトリ名> git commit -m "コメント"

git commit でエラーになる場合
エラーメッセージ

*** Please tell me who you are.

Run

git config –global user.email “you@example.com
git config –global user.name “Your Name”

to set your account’s default identity.
Omit –global to set the identity only in this repository.

fatal: unable to auto-detect email address (got ‘*@DESKTOP-**.(none)’)

指示通りにメルアドと名前を入力する。その際、ダブルクォーテーションは不要
PS C:\Users\name\ディレクトリ名> git config --global user.email メルアド
PS C:\Users\name\ディレクトリ名> git config --global user.name 名前

commitしてpush
PS C:\Users\name\ディレクトリ名> git commit -m "コメント"
PS C:\Users\name\ディレクトリ名> git push heroku master

終了後にHerokuからログアウト。

Ruby Hashに要素を追加する

新しくHashをつくる
hash = Hash.new("")hash = {}

要素を格納する
hash = { hoge: "item1" , hoo: "item2" }

要素を追加する
hash = { bar: "item3" } #これだと変数hashが上書きされてしまう
p hash #=> { :bar => “item3” }

なので要素を追加するときは
hash[:hoge] = "item1"
hash[:hoo] = "item2"
とする。
こうすれば
p hash #=> { :bar => “item3”, :hoge => “item1”, :hoo => “item2” }
となる。

Ruby 2.4.0

ターミナルで文字絵が重なって表示される

るびまを読みながら配列の利用方法を勉強していたら、ターミナルで"□"が重なって表示されてしまった。
Rubyist Magazine - Ruby ではじめるプログラミング 【第 2 回】

□が半角文字と認識されてしまうらしい。
ターミナルの設定を変更したら解決したのでそのときのメモ。

ターミナル > 環境設定 > プロファイル > 詳細
詳細の言語環境項目にある「Unicode 東アジアA(曖昧)の文字幅をW(広)にする」をチェックする。
これで全角表示されるようになった。

Mac OS 10.12.3
ターミナル version 2.7.1

Heroku Ruby version 確認 メモ

Heroku Topページ

Documentation

Reference

Dev Center

Writing a Dev Center Article

Languages

Heroku Ruby Support

Ruby version

現在の最新
Ruby 2.4.0 patchlevel 0
Ruby gems 2.6.8

Ruby sortメソッドでArgumentErrorになる

配列の中にnilがはいっているとsortしたときにエラーになる。

 

array = [3,1,nil,5,4]

p array.sort  #=>ArgumentError

array.delete(nil)  #=>[3,1,5,4]

p array.sort  #=>[1,3,4,5]

 

文字列の配列で空(" ")があるとき、sortすると" "は先頭にくる。

 

str = ["f","","e","c","a"]

p str.sort #=>["","a","c","e","f"]

str.delete("")

p str #=>["f","e","c","a"]

 

ruby 2.3.1

空の値をつかった条件分岐

指定したカラムの値が空のときは......、のような条件づけをするときの""(ダブルクォートのみ)とnilについて。

if column_name == ""

  ...

end

if colimn_name == nil

  ...

end

の違い。

 

insertするとき、カラムは指定して値にシングルクォートのみを入れたときは""でカラムを指定せず何も入力しなかったらnil

条件をつけたとき、前者は

['column_name'] == "" が trueで ['column_name'] == nil だと false。

後者は

['column_name'] == nil が trueで ['column_name'] == ""だとfalse になる。

 

create table addresses (

name  text,

address1 text,

address2 text

);

 

insert into addresses (name,address1) values

('Taro Yamada' , '1-2-3 ooo-cho');

ならaddress2はnilがtrue。

 

insert into addresses (name,address1,address2) values

('Ichiro Suzuki' , '4-5-6 ooo-cho' , ' ');

ならaddress2は""がtrue。

 

ruby 2.3.1

postgeSQL 9.6

 

 

データベースの重複データを削除

データベース内の重複したデータを削除して一覧表をつくった。

やりかた。

データベースの値を << メソッドで配列に格納してからuniqメソッドで重複した要素を削除。重複がなくなった配列からeachメソッドで1件ずつ出力した。

 

 --postgreSQL--

database名:stocklist

table名:stocklists

warehouse  stock1              stock2               stock3

倉庫1          りんご             バナナ               みかん

倉庫2          りんご               パイナップル     キウイ

倉庫3          ぶどう            メロン      みかん 

 

--ruby file--

require 'active_record'

ActiveRecord::Base.establish_connection(

    adapter: 'adaptername'

    host: ' '

    username: 'myname'

    password: ' '

    database: 'stocklist'

)

 

class Stocklist < ActiveRecord::Base

end

 

lists = Array.new

Stocklist.each do | stock |

    lists << stock['stock1'] << stock['stock2'] << stock['stock3']

end

 

lists.each { | list | puts list }

 

--出力見本--

りんご

バナナ

みかん

パイナップル

キウイ

ぶどう

メロン

 #重複なく出力成功

 

失敗例

ブロック内で出力をかけたら、各レコード毎に出力してしまい、3重に出力してしまった。

Stocklist.each do | stock |

    lists << stock['stock1'] << stock['stock2'] << stock['stock3']

    lists.each do | list |

        puts list

    end

end

 

--出力見本--

りんご #倉庫1の在庫

バナナ

みかん

りんご  #倉庫1 + 倉庫2の在庫

バナナ

みかん

パイナップル

キウイ

りんご  #倉庫1 + 倉庫2 + 倉庫3の在庫

バナナ

みかん

パイナップル

キウイ

ぶどう

メロン

#3重に出力されてしまう。

 

なので stock を格納するブロックが終わったあとに、あらためてeachメソッドで変数 listsの出力をするとうまくいく。