既に存在する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の設定
ここ、ハマったのだけどRailsはlocalhostとしても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 してみる。