RubyでTwitterAPI利用したアプリを作った時に発生したエラー

Featured image

こんにちは。

先日 TwitterAPI を利用した 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 にすればよい。

以上

comments powered by Disqus