読者です 読者をやめる 読者になる 読者になる

tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

既に存在するRailsアプリの開発環境用のRailsをセットアップする

rails

RailsアプリのJavaScriptとかHTMLの仕事が入ったので。アプリを起動させられるようにする。

まず、Railsのセットアップから

Rubyのインストール

もらったRailsのコードがRails4.1.6だったので、それが動くようにセットアップ。Rubyは2.1.6にする。

rbenvを使う

rbenv を使って ruby をインストールする(CentOS編) - Qiita
にある通りインストール。なんの問題も無かった。

その後、globalでrubyを2.1.6に変更。

Railsをインストール

...の前にこれらをインストール(debian8)

# apt-get install -y ruby rubygems-integration sqlite3 libsqlite3-dev
## railsのためにこれらのパッケージが必要
# apt-get install -y libxml2 libxml2-dev libxslt1-dev nodejs zlib1g zlib1g-dev
# gem install rails
# gem install sqlite3

んでから、

$gem install rails -v 4.1.6

何の問題も無かった。というか、これは後でわかったけど、bundleを使えばそもそも必要なかった。

bundleのインストール

Railsアプリには、Gemfileというのがあってこのファイルで必要なgemを定義している。
Gemfileを使うにはbundle gemが必要。

$gem install bundle
Gemfileにあるものをインストール

Gemfileのあるところまできて、

$bundle install

・・・とエラーが出た。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/xxx/.rbenv/versions/2.1.5/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

libpq-fe.hが無い・・・PostgreSQLっぽいので

# yum install -y postgresql-devel.i386

してから再度実行。

Your PostgreSQL is too old. Either install an older version of this gem or upgrade your database.
*** extconf.rb failed ***

CentOS5だったからPostgreSQL 古すぎるよって怒られた・・・・PostgreSQL9.2をここを参考にしてインストール。
CentOS5にpostgresql9.2をインストール - LET__IT__RIDE


・・・・まだエラーが出る。libpq-fe.hが無いと。。。
指定して個別にインストールしたらうまく行った。

$ gem install pg -- --with-pg-include=/usr/pgsql-9.2/include/ --with-pg-lib=/usr/pgsql-9.2/lib/

その後、再度bundle installで完了。

Railsの起動

そして、おもむろに

$rails server

してみる。。。が、エラー

Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

JavaScriptのランタイムが無いといわれてしまった・・・。

JavaScriptランタイムのインストール

http://mymemo.weby117.com/develop/ruby-geminstall-error_3.html
を読むと、therubyracerが良いらしい。

therubyracerのインストール

Gemfileに gem 'therubyracer'を記述して、bundle install ....。。。が

creating Makefile
Compiling v8 for ia32
Using python 2.4.3
Using compiler: /usr/bin/c++ (GCC version 1.4.2)
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher

といわれてエラー。$ c++ --versionすると、「c++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)」って言われるしな・・・・。

Node.jsのインストール

仕方ないので代替のNode.jsをインストール。
CentOS5にnode.jsをインストールする | パチスロ日記と仕事メモ
によると、CentOS5のPythonでは0.6系までしかインストールできないらしいので、0.6.21をインストール・・・・2012年8月3日リリース・・・。こんな古いので大丈夫なのか。。。と思ったが、意外と問題なかった。


データベースに接続できませんエラー

/home/xxx/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/railties-4.1.6/lib/rails/application/configuration.rb:105:in `database_configuration': Cannot load `Rails.application.database_configuration`: (RuntimeError)
Could not load database configuration. No such file

つか、そもそもPostgreSQLが起動してなかった・・・

# /etc/init.d/postgresql-9.2 start

/var/lib/pgsql/9.2/data is missing. Use "service postgresql-9.2 initdb" to initialize the cluster first.
                                                           [FAILED]
[root@www17248uj node-v0.6.21]# service postgresql-9.2 initdb
Initializing database:                                     [  OK  ]
[root@www17248uj node-v0.6.21]# /etc/init.d/postgresql-9.2 start
Starting postgresql-9.2 service:                           [  OK  ]

で、起動。ついでにchkconfig postgresql-9.2 onしておく。

rake db:***コマンド

database設定

Railsのconfig/database.ymlに設定する

development:
  adapter: postgresql
  host: localhost
  encoding: utf8
  database: db_dev
  pool: 5
  username: dbuser
  password: xxxx
PostgreSQLの設定

ここ、ハマったのだけどRailslocalhostとしても127.0.0.1のネットワーク越しにつなぐのでpg_hba.confにおいて、

host    all     all     127.0.0.1/32    md5

としなければいけない。all all md5は適宜設定いただくとして、自分は

local    all     all     md5

としていてpsqlではつながるのになんでrakeでつながらないんだーとかなり憤慨していた。

もう一つハマりが、rake db:createをするユーザーに対してcreatedbの権限を与えておく。そもそもdb:createしなくて手動で作るなら不要(っぽい)。

[root@xxx ~]# su - postgres
-bash-3.2$ psql -U
psql: option requires an argument -- U
Try "psql --help" for more information.
-bash-3.2$ psql
Password:
psql (9.2.9)
Type "help" for help.

postgres=# alter role dbuser createdb;
これだと、Unicodeにならない
$ initdb -E utf8

しておけばいいらしいけど、Ubuntuの場合既にinitdbされている。

ンで、なんでかわかんないけどdatabase.ymlで

default: &default
  adapter: postgresql
  encoding: unicode
  template: template0

ってしておくとtemplte0がうまく使われてDBを作ってくれる。参考:dotinstallのHeroku入門で激しくハマった - Qiita

rake db:schema:loadが失敗する
Devise.secret_key was not set. Please add the following to your Devise initializer:

と言われて失敗する。


config/initializers/devise.rbに次の行を追加する。

config.secret_key = 'abcdefg1234-tekitou-na-moji'

適当な文字で構わない。

・・・が、rake db:schema:load してもまたエラー。道のり長いなぁ・・・・。

NameError: undefined local variable or method `config' for main:Object


・・・と思ったらどうもGemfileに

gem 'devise'

が無かったようで、手動インストールする。その後、config/initializers/devise.rbを削除して改めて

$ rails generate devise:install

・・・だめだ。。

ということで、いったんテンポラリのRailsプロジェクトを作って、ダミーのdevise.rbを作る。

$ rails new devise
$ cd devise/
$ emacs Gemfile # gem 'devise' を加える
$ bundle install
$ rails g devise:install # config/initializers/devise.rb ができる

できたconfig/initializers/devise.rbを本番のRailsプロジェクトにコピーし、config.secret_key のコメントを除去。その後、接続するpostgresユーザーにsuperuserロールを与える。何故かこれしないと rake db:schema:loadが成功しなかった。

# su - postgres
-bash-3.2$ psql
Password:
psql (9.2.9)
Type "help" for help.

postgres=# alter role dbuser superuser;

もう動けば何でもいいっす。

これでようやく、rails serverコマンドで起動した・・・・。長かった。。。

wget http://localhost:3000 で試す。

500エラーが返ってきた。想定の範囲内

Unexpected error while processing request: Missing `secret_key_base` for 'development' environment, set this value in `config/secrets.yml`

ってエラーが出てるので

$ rake secret

して出てきた長い文字列<%SECRET%>をconfig/secrets.ymlに書く
|

development:
  secret_key_base: <%SECRET%>

Railsサーバを再起動。。。またエラー。。。とりあえず$ rake db:migrateしてみるが効果なし。。。あれ?データをロードしてない???
rake db:seed してみる。