先日Twitter APIを利用したWebアプリケーションを作成しました。 今回はこのWebアプリケーションを作成した際に発生したエラーを時系列に記載していきます。

言語・環境 見出しへのリンク

Ruby

Rails

Twitter api

postgresql

heroku

sqlite3 がインストールできなくて失敗する 見出しへのリンク

最終的にはpostgresqlを利用したのですが、sqlite3をバージョン指定でインストール時にもエラー発生したので備忘として。

sqlite3をバージョン指定でインストール sudo gem install sqlite3 -v ‘1.3.13’ — –with-sqlite3-lib=/usr/lib インストール時と同じパラメータを設定 bundle config build.sqlite3 –with-sqlite3-lib=/usr/lib 再度実施 bundle install –path vendor/bundle

成功

ただherokuで利用できるpostgresqlを使用したかったので、homebrewにてpostgresqlをインストール

postgresqlインストール時発生したエラー 見出しへのリンク

postgresqlインストール
brew install postgresql

インストール状況確認
brew list ls -l /usr/local/Cellar/

postgresqlバージョン確認
psql –version

postgresql初期化
initdb /usr/local/var/postgres -E utf8

postgresql基本コマンド
スタート
brew services start postgresql
ストップ
brew services stop postgresql
リスタート(再起動)
brew services restart postgresql

postgresqlをインストールしたのでGemfile にも
gem ‘pg’
を追記してbundle installをしたところ、

Can’t find the PostgreSQL client library (libpq)
An error occurred while installing pg (1.1.3), and Bundler cannot continue.
Make sure that `gem install pg -v ‘1.1.3’ –source ‘https://rubygems.org/’` succeeds before bundling.

でインストールできず。

色々試行錯誤した上、以下コマンドでインストール自体はできた。

env ARCHFLAGS=”-arch x86_64″ gem install pg
sudo ARCHFLAGS=”-arch x86_64″ bundle install –path vendor/bundle

DBサーバー起動後開発ユーザー作成
createuser ユーザー名
psql -q -c’select * from pg_user’ postgres

database.ymlの内容でデータベースを作成
rake db:create

migrationを実行
rake db:migrate

database確認
psql -l

Railsアプリ作成 見出しへのリンク

アプリ作成
rails new tipran

コントローラー作成
rails g controller home

html作成
top.html.erb

routes.rb作成

他セッションやTweetのタイムラインコントローラー作成した

Twitter API利用するため 見出しへのリンク

以下別記事でまとめています。

【大枠まとめ】Ruby on Rails で TwitterAPI を利用したアプリを作る

なおSECRET_KEY_BASE や、Twitter API KeyとTwitter API Secret Keyは知られたらまずい値なのでdotenvを使う。
gem ‘dotenv-rails’

ローカルサーバー起動 見出しへのリンク

ローカルサーバー起動
rails s

topページは開いた
ただ
OAuth::Unauthorized
403 Forbidden
でエラー発生

Twitterの仕様変更で、Twitter Appsの設定 Callback URLがオンになっていた。 App detailsのCallback URLに
https://127.0.0.1:3000/auth/twitter/callback
https://localhost:3000/auth/twitter/callback
を設定したら直った。

ただ次は「rails s」コマンドを入力したら
「Your Ruby version is 2.3.7, but your Gemfile specified 2.4.1」
と表示されてローカルで動作確認できなくなった。

一時対応として「bundle exec rails server」を入力して解消した。
本番環境でリリースする際は、本番の callback url を設定する必要あり。

アプリ作成してテストしたら次はデプロイ

デプロイ 見出しへのリンク

herokuを利用しました。

herokuではまず環境変数設定した。
secret_key_base はランダム文字列セット
heroku config:add secret_key_base=”$(bundle exec rake secret)”
heroku config:add twitter_consumer_key=”xxxxxxxxxxxxxxxxxxxxx”
heroku config:add twitter_consumer_secret=”xxxxxxxxxxxxxxxxxxxxx”

git push heroku master

画像が読み込まれてない場合。
bundle exec rake assets:precompile
コンパイルされた新しい画像ファイル名を定義する。
てか
config.assets.compile = false
をtrueにすればよい。

以上