Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

Google Books API | PostgreSQL の使い方

公式リファレンス

developers.google.com

Rubyでの書き方(ラッパー):Google Books
サンプルコード

# .rb
require 'googlebooks' # unless you're using Bundler

books = GoogleBooks.search('The Great Gatsby')
first_book = books.first

first_book.authors #=> 'F. Scott Fitzgerald'
first_book.isbn #=> '9781443411080'
first_book.image_link(:zoom => 6) #=> 'http://bks2.books.google.com/books?id=...'

www.rubydoc.info


rubygems.org

gemの書き方

gem 'googlebooks', '~> 0.0.9'

解説
Google Books APIの解説
vintage.ne.jp

Rails PostgresSQLを使う

qiita.com

qiita.com

rails s した時のエラーメッセージ

Action Controller: Exception caught
PG::ConnectionBad
~~

以下参考サイトの引用


起動&接続
以下で実行してみる。

$ postgres

エラーになるはず。

postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.

コンフィグファイルを指定していないのが原因

postgresqlbrew で install したときに、
/usr/local/var/postgres
が作成されている。これを環境変数にセットしておく。

~/.bashrc に以下を追加。

export PGDATA='/usr/local/var/postgres'

もちろん $ source ~/.bashrc する。

今度は起動できる

$ postgres

  • その後Databaseを作成すること
# データベースを作成
rails db:create

Postgresqlの操作方法

qiita.com
qiita.com

bundle exec rails db
  • データベース一覧を表示
データベース名=# \l
  • ユーザ一覧を表示
データベース名=# \du
  • テーブル一覧を表示
データベース名=# \d
  • テーブル定義を確認する
データベース名=# \d groups
  • データベースへの接続を終了
データベース名=# \q

Postgresqlのユーザへのロールの与え方

  • データベースを作成し、そのデータベース用の管理ユーザを設定する
  • 新規作成したユーザにロールを与えることができない

作成したユーザにSuperuser権限(ロール)を与えたい

データベース名_development=> ALTER ROLE "データベース名" WITH Superuser;
ERROR:  must be superuser to alter superusers

作成したユーザにスーパユーザ権限を与えないといけない
  • postgresqlにrootユーザでログインするのってどうやるの?
psql -l //データベース名を確認
psql postgres // rootでpostgreSQLにログイン

ALTER ROLE "データベース名" WITH Superuser;

できた!!

Postgresqlにユーザを追加して、ログインする

qiita.com

ユーザを指定してデータベースログインする

psql -U role_sample

DBを指定して、指定ユーザで再度ログイン

$ psql -U role_sample -d postgres
$ psql -U ユーザ名(ロール) -d データベース名

データベースでのログインユーザを確認する

  • データベース情報を確認
データベース名=# \c データベース名

Postgresql のデータベースの削除方法

 
qiita.com

# DROP DATABASE データベース名 だと以下のエラー
cannot drop the currently open database 


PosgreSQLで強制的にデータベースを削除する方法

psql -l //データベース名を確認
psql postgres //postgreSQLにログイン
\du //ユーザーと権限を確認

ps aux | grep 消したいDB名 // 消したいDB名のプロセスID(数字)を確認
sudo kill プロセスID
//以下例
sudo kill 45912
# postgresqlだとエラーだったので、以下は権限ユーザに書き換え
dropdb -U postgres(もしくは消す権限のもったユーザー) 消したいDB名

Ruby+WebAPI TrelloでWebAPIの使い方を学ぶ 1 -API keyの保護-

Ruby + WebAPIをいうことで、TrelloAPIを使ってTODOアプリを使ってみる
www.youtube.com

API keyの保護
Githubにコードをpushするとき、認証に関わるキー:API keyは保護されていないといけない。
丸見えのままだと他人が自分のアカウントにログインできてしまう

qiita.com

Rubyでの環境変数dotenvの使い方

morizyun.github.io


↑でrubyソースコードの方で、dotenvを読み込む設定の行を忘れていた

require 'dotenv'
Dotenv.load 
# require 'dotenv/load' でも可

p ENV['KEY1'] # 環境変数を読み込んで表示

Rails RubyでAPI作成 ~JSON形式のデータをcurlでPOSTできないとき~

RailsAPIアプリの作成
ここら辺を参考にした
主にこれ
qiita.com

www.sejuku.net

qiita.com

ruby-rails.hatenadiary.com

curlJSON形式のデータをPOSTできない.permitの問題だった
これコケたのでメモ。
絶対忘れる。

  • RailsAPIアプリを新規作成。scaffold
$ rails new api-project --api
$ rails g scaffold users
  • controllerにJSONデータを受けた時の返し方が書かれてる
class UsersController < ApplicationController
  before_action :set_user, only: [:show, :update, :destroy]

  # GET /users
  def index
    @users = User.all

    render json: @users
  end

  # GET /users/1
  def show
    render json: @user
  end

  # POST /users
  def create
    @user = User.new(user_params)

    if @user.save
      render json: @user, status: :created, location: @user
    else
      render json: @user.errors, status: :unprocessable_entity
    end
  end

~~~

  private
  ~~~

    # Only allow a trusted parameter "white list" through.
    def user_params
      params.fetch(:user, {})
    end
end

下記のエラー
Error:ActiveModel::ForbiddenAttributesError

POSTできないやんけ!!!

Error:ActiveModel::ForbiddenAttributesError
原因

  • Rails4のコア機能であるStrong Parametersの仕様による「検証通ってないよー」というエラーだそうです。
  • パラメータに許可を与えなくてはいけない
  • strong parameterのパラメータに.permitメソッドを追加すればいい

変更前

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :update, :destroy]

 ~
   # POST /users
  def create
    @user = User.new(user_params)

    if @user.save
      render json: @user, status: :created, location: @user
    else
      render json: @user.errors, status: :unprocessable_entity
    end
  end

 ~~~
 private
    ~~~
    # ここが問題だった
    def user_params
      params.fetch(:user, {})
    end
end

変更後

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :update, :destroy]

 ~
   # POST /users
  def create
    @user = User.new(user_params)

    if @user.save
      render json: @user, status: :created, location: @user
    else
      render json: @user.errors, status: :unprocessable_entity
    end
  end

 ~~~
 private
    ~~~
    # createアクションに渡すstrong_parameterに許可.permitを与える
    def user_params
      params.fetch(:user, {}).permit(:users, :name, :string)    
    end
end

進捗出たな

Rails Web本棚制作 ~AWS:S3の利用~

AWSの使い方、Amazonアソシエイトアカウントの作成など、
外部サービスの利用開始までの一連の流れがめんどい。

AWSの初期設定
目的別のユーザ(運用ユーザ)を作成
qiita.com


AWSでS3サービスを利用して、Webページを外部公開する流れ
qiita.com

Amazon APIの利用 が死ぬほどめんどくさくて、詰んだ
利用申請中

Amazon API関係
Amazon APIを利用するのに、必要な認証情報

ASSOCIATE_TAG = [AmazonAPIのアソシエイトタグ]
AWS_ACCESS_KEY_ID = [AmazonAPIのアクセスキー]
AWS_SECRET_KEY = [AmazonAPIのシークレットキー]

haniwaman.com

Amazonアソシエイトからの認可待ってるのめんどいし、
Google Books APIに鞍替えしようかな

Google Books API

qiita.com

  • 書籍検索APIで参考になるサイトがまとめて掲載してある

www.memory-lovers.blog

  • そのまま動く Google Books API + Vue.js

qiita.com

  • APIで取得してきたデータをVue.jsでワンページだけ表示

www.webprofessional.jp


Rails + Vue.js
次の3段階でVue.jsを使えるようにする

  • 1. Railsで作るVue.jsアプリ チュートリアル
    • Webpackerってなんだ??
    • Webpackerのinstallでエラーになったので。

qiita.com

【Rails】rails webpacker:install に失敗する場合の対処法 - Qiita


  • 2. Vue.jsとRailsでTODOアプリを作る

qiita.com

  • 3. Vue.jsを使ってホームページを3時間で爆速公開

qiita.com

Railsフレームワークとしての機能をメインに使わねば!!
上記だとVue.jsを使って書籍情報をGoogle Books APIで得るという側面が強くて舵を切る

www.ibm.com

railsguides.jp

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

github.com

やっと解決した:バージョン指定してyarnをインストール
古いyarn入れてもどうにもならんかった
qiita.com

システムからyarnを削除する
②平然とyarnのバージョンが帰ってきた場合
yarnのアンインストールが完了していなさそうです。

困ってしまったのでyarnの公式からもリンクされている下記issueを参考にして進めました。
https://github.com/yarnpkg/yarn/issues/1139#issuecomment-441168002

まず先ほど$which yarnで調べた場所を見にいきます。そこに入っている yarn と yarnpkg というファイルを削除してみます。

$rm -f yarnpkg
$rm -f yarn

これで$yarn --versionしてもコマンドが通らなくなりました。
yarnが通らなくなったことが確認できたので上記の2ファイルが入っていたディレクトリを削除します。
私の場合 .yarnにyarn と yarnpkgが入っていたので削除します。

$rm -rf .yarn

次に、かつてyarnをインストールするときにダウンロードしたであろう、yarn.repoを削除します。

$cd /etc/yum.repos.d/

上記フォルダの中にyarn.repoが入っていたのでこれを削除しました。

$sudo rm -f yarn.repo


qiita.com

Rails Web本棚制作 ~Ruby, Railsのバージョン指定~

Ruby 2.5.1 Rails 5.2.2で 開発したい

Bundlerというgemを使って、ライブラリの依存関係もまとめて管理

  • これでいける

qiita.com

qiita.com


qiita.com

bundleで用意したrails環境
$ bundle exec rails s 起動しても、アクセスエラーとなる場合

  • Postgresql がうまく起動できていならしい


$ brew install postgresql
$ brew link postgresql
$ pg_ctl -D /usr/local/var/postgres start

こちらの最後のコマンドを忘れていたみたいです。起動はできました!
みなさん、ありがとうございます。
Ruby - Postgresqlに接続ができません|teratail

加えてデータベースが無いとのエラーが出る

ActiveRecord::NoDatabaseError

$ rails db:create

で作ってあげれば解決