ドコモ光がつながらなくなったときの対処

ドコモ光を開通してから1ヶ月たったときにつながらなくなったので
その対処と原因のメモ

帰宅後に Amazon TV が見れなくなり、
Nexus7 での検索やクックパッドレシピが見れないため
原因を探ることに

まず疑うのがONUのランプがすべて点灯しているかということ

今回の場合、電源は点灯しているけど
インターネットと認証の部分が点灯していないため
インターネットでまずは検索

NTT機器のランプ状態

を元に状態の確認

電源をOFFにしてから数分後に電源をいれるというのもあったけど
こちらも効果なし

次に、光ケーブルの接触不良や、差し込みが外れている可能性を考えて押し込んでみたけど
これも効果なし

このため、
NTT西日本
0120248995
の番号がONUに記載されていたため
こちらに電話をかけたものの、ドコモ光の場合は対応が違う場所になるということで

ドコモ光サポート
0120800000
に電話をかけ直すことに

ちなみに、本人確認のために
契約したときの電話番号と
使用している携帯がdocomo でない場合、ドコモ光の契約IDが必要になります

電話をかけた結果、電源のOFF、光ケーブルといったものを再度行うように
言われたけど、効果がないため
NTTの業者が訪問し、調べることに
日程の予約をして後日診断してもらった結果
光ケーブルを束ねてあったけど
これが原因でした

折れ曲がっていたため、断線のような状態になっていたようです

rails コンソールでのデータ取得方法

rails コンソールでのデータ取得方法

.all だとすべてのデータの取得ができる

特定の id のデータを取得したいのなら
find() を使う

もし id:1 のレコードを取得するのなら
find(1)
というようになる

Messageの中から取得するのなら

Message.find(1)

というかんじ

もちろん、この検索結果を変数に格納することもできる

hoge_msg = Message.find(1)

とすると hoge_msg に結果が格納される

次に find_by()
find と似てるけど、こっちは
カラム名と値のペアで検索できる
これは、名前とかで検索するときに使える

ちなみに、取得できるのは1件だけなので注意

hoge_msg = Message.find_by(name:"hoge")

とすると
nameが hoge のものを hoge_msg に格納する

応用で body の中身が test のものを検索して格納なら

test_msg = Message.find_by(body:"test")

というようになる

もし1件ではなく、該当するものすべてにしたいのなら
where を使う
body が hello のものをすべて調べるのなら

Message.where(body:"hello")

とすればいい

rails のDBをコンソールで操作

rails のDBをコンソールで操作

rails c

とすると
rails コンソールになり
データ作成、保存、削除などをコマンドで行うことができる

なお、タイプしているときに
tab を押すと補完機能で候補がでる

もし、メッセージをいれるのなら
まずは変数に代入

msg = Message.new(name:"hoge",body:"test text")

として
次に

msg.save

とすると保存される

入力するときに
id が nil でも自動で振り分けなら問題ないし
作成時刻の created_at や
更新時刻の updated_at も自動で入るので
nil でも問題ない

あと、
.save を実行したときに

=> true

がでるけど、これはデータ保存できたことを示す
もし、 false なら保存できていないということ

保存したデータをすべて取得するのなら
.all をつかう

もし、Message に保存したものをみるのなら
Message.all
とすればOK

このときに id が自動で連番で保存した順番についているのがわかる

なお、rails c で
rails コンソールになっている状態から抜けるには

quit

とすれば抜けることが可能

rails のマイグレーション

rails のマイグレーション

マイグレーションは
DBのテーブルの作成や修正に使う機能のこと

このマイグレーションにより
SQLを書かずに
ruby でファイルにDBの変更内容を記述することにより
DBのスキーマを作成したり更新したりできる

スッk−まは
どのテーブルに
どの形式のカラムが含まれているかという情報のこと

マイグレーションファイルは
rails g model などのコマンドを実行すると
db/migrateフォルダに作成される

これができた状態で

rake db:migrate

を実行すると
db/schema.rb に
DBのスキーマが記録される

この
db/schema.rb は
マイグレーションにより自動で更新されるので
手動でいじらないこと
これと似たようなものが Android アプリ作成のときにも
あったような…..

ちなみに、実際のDBテーブルは

rake db:migrate

を実行したときに作成される

なので、

rake db:migrate

のあとにマイグレーションファイルを編集しても
内容は反映されないので注意

マイグレーションファイルは、設定のためのファイルのようなもの
sql ファイルをいじっても実行しないとDBが更新されないようなかんじ

実行すると

== 20161103144900 CreateMessages: migrating ===================================
-- create_table(:messages)
   -> 0.0011s
== 20161103144900 CreateMessages: migrated (0.0012s) ==========================

というように
テーブルが作成されたのがわかる

これで作成されたDBのテーブルは
db/schema.rb で確認できる

つまり、どんなテーブルを作成するのかなどの
model 関連を調べるには
schema.rb をみて予測することができる

ちなみに、rails のDBはデフォだとsqlite になる

このため
db/development.sqlite3 がDBファイルになる

もしDBの中身をみたいのなら

rails db

とすると
sqlite コンソールを開けるので

.schema

とすると
作成したテーブルをみることができる

やり方は
テーブルスキーマ(構造)の確認

を参考にさせていただきました

ちなみに、sqlite3 の状態から抜けるには

.q

とすればOK

rails 基礎(MVC)の model

rails 基礎(MVC)の model

rails ではDBを使ってデータ保存をする
model はDBに含まれるテーブルごとに用意される

model をつくるには
rails g model コマンドを使う

構文は

rails g model モデル名

基本的にはこれでOKだけど
model の名前は単数形にすること

そして model を決めるときに
オプションでカラム名とデータ型を決める
例えば
名前なら
name:string

メルアドなら
email:string
というかんじ

これで model名を Message としたいのなら

rails g model Message name:string email:string

というかんじになる

これを実行すると
models フォルダの中に
message.rb が作成され

db/migrate フォルダの中に
マイグレーションファイルが作成される
このときに実行したときの時間などがファイル名に書かれる

なお、model の class は
ActiveRecord::Base
というようにクラス継承によりDBのテーブルを使えるようになっている

class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
      t.string :name
      t.string :email

      t.timestamps null: false
    end
  end
end

というコードの場合
< ActiveRecord::Migration により ActiveRecord::Migration クラスを継承している create_table :messages は messages テーブルの作成 t.string :name t.string :email は name と email というカラムを string型で作成という意味になる t.timestamps null: false はタイムスタンプの設定で 自動的に作成日時の crated_at そして 更新日時の updated_at をテーブルに追加する この行で null: false があるけど これは null 禁止のこと

rails 基礎(MVC)の controller

rails 基礎(MVC)の controller

controller は基本的に処理を担当する

作成するには

rails g contoller コントローラ名 アクション

という構文になる

もし messages コントローラへ index アクションをつくるのなら

rails g controller messages index

となる

index アクションは一覧表示につかう

ちなみに
messages というように複数形にしているけど
これは model つまりデータをあつかう
controller の場合は名前を複数形にするというルールがあるため

アクションについては
http://igarashikuniaki.net/rails_textbook/crud.html
をみると理解しやすい

解説が scaffold になっているけど
新規投稿などの入力関連は new
編集をしたいのなら edit
詳細を出したいのなら show
となる

もし、食べログみたいな投稿サイトなら
投稿なら new
詳細なら show
編集するのなら edit
というようになる

ちなみに

rails g controller messages index

を実行すると
対応する view も一緒に作成される

また、これにより
config/routes.rb に

get 'messages/index'

が追記される

URL関連は

raike routes

で確認できる

messages_index GET  /messages/index(.:format) messages#index

が実行結果

意味は
messages/index に
GETを送信したら
messages コントローラの index アクションを実行
という意味になる

でも一覧表示は / へアクセスしたときに出したいのなら

root 'messages#index'

と変更する

これで
localhost:3000
でアクセスしたときに一覧表示になる

messages#index

コントローラ名#アクション名
という意味

rails 基本復習

rails 基本復習

model DB
view 画面
controller 処理

routes でURLの割り当てをする
これで、コントローラのどのメソッドで処理するか決める

DB操作は controller が model を仲介してDBから
データ取得、作成、更新などをやる

view の描画については
controller で model からデータを取得して
view で wordpress みたいに画面表示する
なお部品ごとにファイルを分割可能

RESTと呼ばれる処理は
対象のURLに対する操作のこと

GET で取得
POST で作成
PATCH/PUT で更新
DELETE で削除
となる

twitter とかのようなシステムなら
/messages/1 というメッセージに対して
これらの処理をすることになる

この1は、メッセージのIDのこと

メッセージ関連とするなら
GET メッセージの一覧、詳細表示

POST メッセージ作成

PATH/PUT メッセージ更新

DELETE メッセージ削除

となる

次にDB
基本的にはデータの一元管理
データ保存、取得することが目的

ユーザとかメッセージなどはDBに格納される

RDB構造は
基本的に1つの rails に対し1つのDBとなる
あとはこのDBの中に複数のテーブル
つまりEXCELのシートみたいなものができている
で、EXCELシートの中がデータみたいなかんじ

RDBは
カラム(縦列)
レコード(横列)
でできている(EXCELふうにいうと)

そしてカラムにどういうデータを保存するのかを指定する
例えば名前なら varchar 型

rails でやるときの注意点としては
NULL を nil として表現すること
NULL禁止にするとNULLが入ったレコードが保存不可になる

あと rails だと id が primary key 扱うになる

sandbox 支払いテスト

sandbox 支払いテスト

支払い画面で
PayPal アカウントから支払うをクリック

Screenshot from 2016-10-13 23:40:52

sandbox アカウントで
PERSONAL type で作成したアカウントでログイン

カード入力画面になるので
テストアカウントなので
適当にカード番号などを入力
なお 4980 は VISA のときに使う番号

次の画面では確認のための画面なので
同意して支払うをクリック

Screenshot from 2016-10-14 00:15:55

次の画面で Test Store にもどるをクリック

Screenshot from 2016-10-14 00:16:36

しばらくすると
トップページにリダイレクトされ
購入時のステータスが表示される

Screenshot from 2016-10-14 00:17:32

なお、これらの情報に関しては
paypal develoer サイトで
Dashbord の中にある
Nortifications で確認が可能

Screenshot from 2016-10-14 00:20:48

paypal sandbox の使用

paypal sandbox の使用

まずは paypal developer account の取得

paypal に登録して
https://developer.paypal.com/
へアクセス

次にsandboxアカウントを作成ため
Dashbord をクリック

Screenshot from 2016-10-11 23:31:35

次に sandbox をクリックし
Create Account をクリック

Screenshot from 2016-10-11 23:35:27

paypal sandbox アカウントの作成でメルアド入力があるけど
テストなので実在しないもので適当でOKでした

PayPal Sandboxの使い方、テスト方法

を参考にさせていただきました

countryには Japan
Account Type には Business(Merchant Account)
Email にはメルアドで存在しないものでOKですが
ほかとかぶらないものでないとだめです
Password にはパスワードを設定します

Screenshot from 2016-10-11 23:53:56

これらを入力したら、下にスクロールして
Create Account をクリックします

Screenshot from 2016-10-12 00:00:26

同じ要領で buyer アカウントも作成します

異なるところは、Account Type を
Personal(buyer Account) にすることです

Screenshot from 2016-10-11 23:59:22

これで2つのテストアカウントができたら、次に
ngrockをインストールします

ubuntu の場合 パッケージマネージャーでインストールできるので

sudo apt-get install ngrok-client

でインストールします

これで準備はOKなので
まず Atom でターミナルを開けるので
こちらで

rails s

を実行します

次に ctrl + alt + t で端末を開けるので
こちらで

ngrok 3000

で ngrok を起動したのですが

Invalid address server_addr 'ngrokd.ngrok.com:443': lookup ngrokd.ngrok.com: no such host

とエラーがでるので検索

Testing PayPal with Rails

によると

The packaged version (1.6) no longer works, because service for ngrok 1.x was discontinued in April 2016.

The ngrok 1.X service has shut down and all users are encouraged to upgrade to ngrok 2.0.

The easiest way to continue using ngrok is to upgrade to 2.0. ngrok 2.0 has been available for nearly a year and it is a faster, more stable and more powerful tool. I hope that you’ll love it even more than the original.

とあり、

ngrokの1.Xサービスがシャットダウンし、
2.0アップグレードすることをお勧めする

とのことなので、ダウンロードページからダウンロード

現在のngrok のバージョンをみるには

ngrok version

でみれます

ubuntu 14.04 の場合は apt-get でいれると
ver1.6 でした

https://ngrok.com/
へアクセスし
Download をクリック

Screenshot from 2016-10-13 21:43:24

次に使用したいOSのところの Download をクリック
今回は Linux 64bit です

Screenshot from 2016-10-13 21:44:44

次にダウンロードしたファイルの解凍をします

unzip ~/ダウンロード/ngrok-stable-linux-amd64.zip 

ngrokの起動は

./ngrok http 3000

で行います
停止するには ctrl + c を行います

これで端末に表示されている
Forwarding のところにあるURLをコピーし
ブラウザからアクセスします

Screenshot from 2016-10-13 21:59:09

すると、localhost:3000 で起動したデモと同じ画面がでるので
どれでも好きなコースをクリックします
今回は
Register($475) を選択しました

Screenshot from 2016-10-13 22:02:15

すると登録画面がでてくるので
Full name は適当に
Company も適当に
Email と telephone には
sandbox アカウントで
PERSONAL type で作成したアカウントのものを使います

入力したら、Registration Payment をクリックします

Screenshot from 2016-10-13 23:39:31

これで実行したけどエラー

Screenshot from 2016-10-13 22:14:36

参考サイトをよく見たら、モデルの属性を追加するため

rails g migration add_params_status_transaction_id_purchased_at_to_registrations notification_params:text status:string transaction_id:string purchased_at:datetime

の実行が必要

そして、app/models/registration.rb の
9行目の

 business: "merchant@gotealeaf.com",

の中のメールアドレス
を BUSINESS で登録したテストアカウントのメールアドレスに変更します

さらに、/config/secrets.yml の
16行目の

 app_host: http://3c99b47d.ngrok.com

のURL部分を ngrok で表示されたURLに変更します

これで再度 ngrok のURLへブラウザでアクセスし
Registration Payment をクリックすると
paypal の支払い画面がでてきます

Screenshot from 2016-10-13 23:39:31

Screenshot from 2016-10-13 23:40:52

テストモードかを調べるには
URL部分が
https://www.sandbox.paypal.com/
となっているのでわかります

とりあえずここまでできたので続きは次回にします

rails で paypal を使ってみた

rails で paypal を使ってみた

Process Payments With Paypal in Rails, Part 1 – Basic Checkout

にやり方が載っていたので実験

git clone https://github.com/gotealeaf/paypal-basics

git clone
cd paypal-basics/

で移動

rake db:create

を実行したら

rbenv: version `2.1.2' is not installed (set by /home/snowpool/ekitika/paypal-basics/.ruby-version)

となったため検索


rbenvのよく使うコマンドまとめ

を参考に対処

まずは

rbenv -v

でバージョン確認

現在のバージョンは
rbenv 1.0.0-19-g29b4da7

次に
インストール可能なバージョンを確認

rbenv install -l

これでインストール可能なものの中に
今回必要とされているバージョンがあったので
バージョン指定でインストール

rbenv install 2.1.2

少しここで時間がかかるため余裕のあるときに
実行したほうがいいかも

しかし

BUILD FAILED (Ubuntu 14.04 using ruby-build 20160330)

とエラーがでるため検索

Ruby 2.2.0をrbenvとruby-buildでインストール

を参考に対処

sudo apt-get install libffi-dev

を実行したけどすでにインストール済み

このため
rbenv と ruby-build のアップデートをすることに

rbenvを更新してRuby2.3をインストールする

を参考に
rbenv のアップデート

cd ~/.rbenv
git pull

これで rbenv の更新ができます

次に ruby-build の更新

cd ~/.rbenv/plugins/ruby-build/
git pull

で更新

しかし、結果は変わらず

make[2]: *** [ossl_ssl.o] エラー 1

のエラーログを元に
https://github.com/rbenv/ruby-build/wiki
を参考にパッケージをインストール

sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-devhttps://github.com/rbenv/ruby-build/wiki

でインストール

しかし、再度 rbenv で ruby 2.1.2 をインストールしようとすると

compiling raddrinfo.c
compiling ifaddr.c
linking shared-object socket.so
make[2]: ディレクトリ `/tmp/ruby-build.20161010213815.18285/ruby-2.1.2/ext/socket' から出ます
linking shared-object ripper.so
make[2]: ディレクトリ `/tmp/ruby-build.20161010213815.18285/ruby-2.1.2/ext/ripper' から出ます
linking shared-object zlib.so
make[2]: ディレクトリ `/tmp/ruby-build.20161010213815.18285/ruby-2.1.2/ext/zlib' から出ます
make[1]: ディレクトリ `/tmp/ruby-build.20161010213815.18285/ruby-2.1.2' から出ます
make: *** [build-ext] エラー 2


WARNING: ruby-2.1.2 is nearing its end of life.
It only receives critical security updates, no bug fixes.

がでるため
古いものは除外することに

とりあえず
.ruby-version の書き換え
2.1.2 では使えないため
2.3.0 に保存し

bundle update
bundle install

これで問題なく動いた

Screenshot from 2016-10-10 23:43:01

とりあえずデモは動いたので続きは次回