AWS(Amazon) Cloud9でPostgreSQLを起動しようとしたらpostgresql: unrecognized serviceと表示される問題の解決方法

この記事は1分で読めます。

最近友人にrubyとrailsを教えているのですが、開発環境としてAWS(Amazon) Cloud9を使っています。

開発環境と本番環境は極力同じ状態が望ましいので、開発でもPostgreSQLを普段から使っているのですが、AWS Cloud9でrails new . --database=postgresqlをしたら思いのほか大変だったので備忘録として残しておきます。

この記事を書いている段階でrubyのバージョンは2.4.2、railsは5.1.4です。

とりあえずrails newします。

$ rails new . --database=postgresql

が、まず最初から入っているpg ~>0.18でなく0.21を入れろと怒られます。なので、Gemfileのpgの所を0.21にしてインストールを試みます。しかしlibpq-fe.h..noとエラーがでるので、必要なライブラリをインストールします。

$ sudo yum install postgresql-devel

参考: libpq-fe.h が見つけられない。 - Qiita

再度bundle installで無事gemのインストールはできるはずです。

$ bundle install

次にdbを作ります。が、ここでdbと接続できないというエラーが発生する。

$ rails db:create

~~~
could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

これはPostgreSQLが起動してないから?と思って調べてみると、AWS Cloud9にはPostgreSQLプリインストールしてあるからstartさせればOKだぜ!という記事がたくさん見つかる。ので、素直にstartしてみる。

しかし、ここで表題のpostgresql: unrecognized serviceが表示されて進まない。

$ sudo service postgresql start
postgresql: unrecognized service

えーserviceとして認識されてない?とりあえず、PostreSQLに必要だったライブラリ達をインストールする。

$ sudo yum install postgresql postgresql-server postgresql-contrib postgresql-docs

そしてinitdbしてstartしてみる。

$ sudo service postgresql initdb && sudo service postgresql start

今度はうまく起動したみたい。

だけど、このままだとec2-userがいなくてテーブルとか作れないので、psqlでユーザーを作成する必要があります。とりあえずpostgresユーザーを作ってpsqlを実行します。

$ sudo -u postgres createuser -s ec2-user
$ sudo su postgres
$ psql

で、psqlでALTER USERを実行して\qで抜け出します。

ALTER USER "ec2-user" WITH SUPERUSER;
\q

最後に元にユーザーに戻るためにexitし、

$ exit

再度rails db:createを実行してみます。

$ rails db:create

自分の場合はこれでうまくいきました。実は解決までに1時間かかっていて大変でした😭

同じエラーで悩んでいる人の助けになれば幸いです。

それでは👋

t4traw

いつか学んだ知識や技術で人の役にたつ事を目標に日々勉強しています。音楽とウイスキーとRubyが好きです。最近はキャンプと釣り(ライトソルトルアー)も好きです。

コメントください🙋

わかりにくい所や、共感していただける事がありましたら、お気軽にコメントください✋ ブログのコメントでもTwitterなど、どこでも反応します👍

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora