WEBエンジニア目指して

WEB系の勉強日記

rails tutorial 13章 で heroku への push に失敗したときの対処

rails tutorial (第4版)13 章 をやっててつまずいたのでメモ。 heroku へ push しようとして発生したエラーと、その対処法のメモ。 実行環境は AWS cloud9

まず発生したのは以下のエラー。

       Running: rake assets:precompile
       rake aborted!
       LoadError: cannot load such file -- fog

fog を Gemfile に書く。チュートリアルには文字だけでさらっと書かれてるので見落していた。 バージョンは指定なしでも動くはず…。

gem 'fog' #verson??

次に発生したのが以下のエラー。

An error occurred while installing ovirt-engine-sdk (4.2.4), and Bundler cannot continue.
Make sure that gem install ovirt-engine-sdk -v '4.2.4' succeeds before bundling.

メッセージ通り gem install ovirt-engine-sdk -v '4.2.4' を実行すると、さらに以下のエラー。

extconf.rb:29:in `<main>': The "libxml2" package isn't available. (RuntimeError)

ライブラリが足りていないので、以下コマンドで足りないライブラリをインストール。

sudo yum --enablerepo=epel,remi,rpmforge install libxml2 libxml2-devel

再び gem install ovirt-engine-sdk -v '4.2.4' を実行すると libcurl についてもエラーが出たので、以下でインストール。

sudo yum -y install libcurl libcurl-devel

これで gem install ovirt-engine-sdk -v '4.2.4' が通るようになり、bundle install も成功。 heroku に push できるようになった。

【Rails】 _url _path メソッドの使い分け、メソッド名の調べ方

Rails でコントローラのアクションにアクセスするときに使う url, path メソッドについてのメモ。

_url メソッド
  • 完全な url を返す。
  • リダイレクトするときに使用する。
_path メソッド
  • ルートディレクトリからの url を返す。
  • リダイレクト以外で基本的にはこちらを使用する。
メソッド名がわからないとき

rails routes コマンド使い PREFIX を見る。

rails routes
                 Prefix Verb   URI Pattern                             Controller#Action
    password_resets_new GET    /password_resets/new(.:format)          password_resets#new
   password_resets_edit GET    /password_resets/edit(.:format)         password_resets#edit
           sessions_new GET    /sessions/new(.:format)                 sessions#new
              users_new GET    /users/new(.:format)                    users#new
                   root GET    /                                       static_pages#home
                   help GET    /help(.:format)                         static_pages#help
                  about GET    /about(.:format)                        static_pages#about
                contact GET    /contact(.:format)                      static_pages#contact
                 signup GET    /signup(.:format)                       users#new
                        POST   /signup(.:format)                       users#create
                  login GET    /login(.:format)                        sessions#new
                        POST   /login(.:format)                        sessions#create
                 logout DELETE /logout(.:format)                       sessions#destroy
                  users GET    /users(.:format)                        users#index
                        POST   /users(.:format)                        users#create
               new_user GET    /users/new(.:format)                    users#new
              edit_user GET    /users/:id/edit(.:format)               users#edit
                   user GET    /users/:id(.:format)                    users#show
                        PATCH  /users/:id(.:format)                    users#update
                        PUT    /users/:id(.:format)                    users#update
                        DELETE /users/:id(.:format)                    users#destroy
edit_account_activation GET    /account_activations/:id/edit(.:format) account_activations#edit
        password_resets POST   /password_resets(.:format)              password_resets#create
     new_password_reset GET    /password_resets/new(.:format)          password_resets#new
    edit_password_reset GET    /password_resets/:id/edit(.:format)     password_resets#edit
         password_reset PATCH  /password_resets/:id(.:format)          password_resets#update
                        PUT    /password_resets/:id(.:format)          password_resets#update

メソッド名は <PREFIX>_url(path) となる。 例えば、password_resets#new に対する url を生成するメソッドは password_resets_new_url または new_password_reset_url と書ける。

git リモートリポジトリのブランチの状態から作業を再開する

リモートリポジトリのブランチをローカルに持ってきて作業をやり直したかったのでメモ。

まず、以下のコマンドでリモートリポジトリのブランチを確認する。

git branch -r
  heroku/master
  heroku/modeling-users
  origin/HEAD -> origin/master
  origin/account-activation
  origin/advanced-login
  origin/filling-in-layout
  origin/master
  origin/modeling-users
  origin/sign-up
  origin/static-pages
  origin/updating-users

目当てのブランチ名を確認し、git checkout -b でブランチを作成する。 例えば、 origin/updating-users ブランチを hoge というブランチ名でローカルに持ってきたい場合は以下のようにする。

git checkout -b  hoge origin/updating-users

bundle install で pg のインストールに失敗

Amazon colud9 で bundle install したところ以下のエラーが発生

bundle install
----- 中略 ----

Gem files will remain installed in /usr/local/rvm/gems/ruby-2.5.1/gems/pg-0.20.0 for inspection.
Results logged to /usr/local/rvm/gems/ruby-2.5.1/extensions/x86_64-linux/2.5.0/pg-0.20.0/gem_make.out

An error occurred while installing pg (0.20.0), and Bundler cannot continue.
Make sure that `gem install pg -v '0.20.0' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  pg

以下のコマンドで解決。

sudo yum install postgresql-devel