For Want Of A Better Word

【Ruby】RailsをCentOS6.5 | mysqlへの接続-涙の玉突きエラー(`;ω;´)- アプリ起動

      2015/04/18

前回の続き
【Ruby】RailsをCentOS6.5へ。苦労した… – For Want Of A Better Word

デフォルトのsqliteじゃなくて
mysqlに接続しようと思った。

せっかくなので新規アプリを作成する。

scl enable ruby193 bash # ruby193用
rails new second_app -d mysql

そうしたらエラー

Resolving dependencies…
Could not find gem ‘mysql2 (>= 0) ruby’ in the gems available on this machine.

えー接続用のドライバ的なmysql2がみつからないよーっと。
じゃあmysqlをインストールする。

gem mysql2 install

そうしたらエラー

mysql.h is missing.please check your installation of mysql and try again.

extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.Check the mkmf.log file for more
details.You may need configuration options.

Gem files will remain installed in /opt/rh/ruby193/root/usr/local/share/gems/gems/mysql2-0.3.17 for inspection.

mysql2はインストールされているけど、mysql.hが見つからないという事らしい。

そこで下記参考
mysql.h is missing … – Qiita

mysql-develを入れれば良いらしい。

yum install mysql-devel

依存性の解決をしています

    • > トランザクションの確認を実行しています。
      • > Package mysql-devel.x86_64 0:5.1.73-3.el6_5 will be インストール
    • > 依存性の処理をしています: mysql = 5.1.73-3.el6_5 のパッケージ: mysql-devel-5.1.73-3.el6_5.x86_64
    • > 依存性解決を終了しました。

エラー: パッケージ: mysql-devel-5.1.73-3.el6_5.x86_64 (base)
要求: mysql = 5.1.73-3.el6_5
インストール: mysql-5.5.40-1.el6.remi.x86_64 (@remi)
mysql = 5.5.40-1.el6.remi
利用可能: mysql-5.1.73-3.el6_5.x86_64 (base)
mysql = 5.1.73-3.el6_5
問題を回避するために –skip-broken を用いることができません
これらを試行できます: rpm -Va –nofiles –nodigest

remiリポジトリからmysql5.5を入れていた。ベースで合うバージョンがなかったのでエラー。下記でremiリポジトリを有効にしてインストール。

yum install mysql-devel –enablerepo=remi

OK
もういっかい アプリの作成

#rails new second_app -d mysql

…..
中略
…..
Your bundle is complete!

ふー。

アプリでけた。
データベースファイルを確認

# MySQL.Versions 4.1 and 5.0 are recommended.
#
# Install the MYSQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem ‘mysql2′
#
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: second_app_development
pool: 5
username: root
password:
socket: /var/lib/mysql/mysql.sock

# Warning: The database defined as “test” will be erased and
# re-generated from your development database when you run “rake”.
# Do not set this db to the same as development or production.
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: second_app_test
pool: 5
username: root
password:
socket: /var/lib/mysql/mysql.sock

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: second_app_production
pool: 5
username: root
password:
socket: /var/lib/mysql/mysql.sock

自分の環境用にID・パスを書き換えて
アクセス。

f:id:fz6:20150122143631p:plain

ふむふむ

1.rails generateでモデルとコントローラーを作れと

2.config/routes.rbを使ってデフォルトルートを設定して、public/index.htmlを消せと。

3.rake db:createでデータベースを作成しなさいと。

ためしに下記コマンドを実行してみる。
【参考】よく忘れる「rails generateコマンド」の使い方 – Rails Webook

すきゃふぉるどだ!

rails generate scaffold post title body:text published:boolean

エラー

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

【参考】
rails scaffold Could not find a JavaScript runtime – Google 検索

Rails3のScaffoldでエラー `autodetect': Could not find a JavaScript runtime. – Run on Rails

②じゃだめでした。なくなくNodeJSをインストール。(rails使うのに、Nodejsも必要ってのがなんか納得いかない。管理コマンドの場合だけかな。。)

yum install nodejs

で 無事作成された様子。

invokeactive_record
createdb/migrate/20150122055804_create_posts.rb
createapp/models/post.rb
invoketest_unit
createtest/unit/post_test.rb
createtest/fixtures/posts.yml
invokeresource_route
routeresources :posts
invokescaffold_controller
createapp/controllers/posts_controller.rb
invokeerb
createapp/views/posts
createapp/views/posts/index.html.erb
createapp/views/posts/edit.html.erb
createapp/views/posts/show.html.erb
createapp/views/posts/new.html.erb
createapp/views/posts/_form.html.erb
invoketest_unit
createtest/functional/posts_controller_test.rb
invokehelper
createapp/helpers/posts_helper.rb
invoketest_unit
createtest/unit/helpers/posts_helper_test.rb
invokeassets
invokecoffee
createapp/assets/javascripts/posts.js.coffee
invokescss
createapp/assets/stylesheets/posts.css.scss
invokescss
createapp/assets/stylesheets/scaffolds.css.scss

ファイルでけた。
ドメイン/posts/にアクセスしてみると、なんかwrongって言われる。
テーブル出来てない。

マイグレートファイルからDB作成を実行する。

rake db:migrate

(in /var/www/rails/second_app)
==CreatePosts: migrating ====================================================

    • create_table(:posts)

-> 0.0045s
==CreatePosts: migrated (0.0047s) ===========================================

テーブルでけた。

f:id:fz6:20150122153900p:plain

けどまだアカンらしい。
apacheのエラーログを見る。

pp 19976 stderr: ActionView::Template::Error (application.css isn’t precompiled):

Rails 3.2のproduction環境でisn't precompiledと出る場合の対処 – Qiita
設定変更してapache再起動。

別のエラー

ActionView::Template::Error (Permission denied – /var/www/rails/second_app/tmp/cache/assets/44D

tmp以下を777にして対応

ほんだら別のエラー

node: error while loading shared libraries: libhttp_parser.so.2: cannot open shared object file: No such file or directory

node: error while loading shared libraries: libuv.so.0.10: cannot open shared object file: No such file or directory

yum install http-parser

yum install libuv

f:id:fz6:20150122155130p:plain
f:id:fz6:20150122155153p:plain

はー、やっとでけた。。。
CentOS上で、できるだけyumで構築するの大変…..

普通はどこで動かすもんなんだ?

 - rails, ruby

  関連記事

ruby-logo
【ruby】rubyで文字列比較がうまくいかないときは文字エンコードに注意

mysqlからqueryで取得した値と、マルチバイトの文字列を比較したときにどう …

ruby-logo
【ruby】rubyスクリプトをcronで実行

rubyをcronで動かす場合、結構、環境変数を設定しないといけない。 cron …

ruby-logo
[ruby]mysqlからマルチバイト文字を取得したときに、\16進文字コードになる

で、putsじゃないとうまく表示されない。 こんな感じでしか表示されない \x8 …

ruby-logo
【Ruby】ERB(埋め込みRuby)でPHPっぽいRuby

PHPにちょっと飽きてきた。 いうほど使い込んでないけど。   Rub …

ruby-logo
rubyの基本 | ちょっときになったところメモ_2

foreachは各オブジェクトのeachメソッドで。 array.each do …