はじめに
一年ぐらい前に同期とRuby on Railsで社内勉強会用のアプリを作りました。そのあと別の同期とtwitterの検索結果をcsv出力するアプリを作ったりしましたが、それ以来さっぱりです。
で昔は仕事でRailsアプリが担当だったってのもあったんだけど、今はPythonだったりする。でもやっぱりちゃんとやった経験があるのは何かと自信になるのかと、rubyが今でも好きなのと、新しいもの好きということで最近ReleaseされたRails5に入門するよ。
環境構築
以前ruby系の環境をVagrantで作ったので流用し、gem install railsで5.0.0.1が入りました。
[vagrant@currycurator ~]$ rails --version Rails 5.0.0.1
ホスト名は気にしないでよろしい。
mariadb
データベースを何となくmariadbに。ってかCentOS7ってmysqlいれようとしてもmariadbが入るのな。mariadbとmariadb-serverの2つをyumでインストール。
NoSQLのmongodbなりkey-valueなり考えたがとりあえず一番慣れているものを。
データベースとユーザ作成
サービスを立ち上げます。
[vagrant@currycurator ~]$ sudo systemctl enable mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [vagrant@currycurator ~]$ sudo systemctl start mariadb
設定ファイルにはお約束のutf8を設定。
[vagrant@currycurator ~]$ cat /etc/my.cnf | head -n 2 [mysqld] default-character-set = utf8
初期設定
mysql_secure_installationというコマンドがあります。
[vagrant@currycurator ~]$ mysql_secure_installation /usr/bin/mysql_secure_installation: 行 379: find_mysql_client: コマンドが見つかりません NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
rails5というデータベースを適当に作ってみた。
MariaDB [(none)]> create database rails5; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | rails5 | +--------------------+ 4 rows in set (0.00 sec)
プロジェクトフォルダでrailsインストール
二度手間になってしまった。
[vagrant@currycurator ~]$ mkdir rails [vagrant@currycurator ~]$ cd rails/ [vagrant@currycurator rails]$ bundle init Writing new Gemfile to /home/vagrant/rails/Gemfile [vagrant@currycurator rails]$ ls Gemfile [vagrant@currycurator rails]$ cat Gemfile # frozen_string_literal: true source "https://rubygems.org" gem "rails", '5.0.0.1' [vagrant@currycurator rails]$ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/................ Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies... Installing rake 11.3.0 Installing concurrent-ruby 1.0.2 Installing i18n 0.7.0 Installing minitest 5.9.1 Installing thread_safe 0.3.5 Installing builder 3.2.2 Installing erubis 2.7.0 Installing mini_portile2 2.1.0 Installing rack 2.0.1 Installing nio4r 1.2.1 with native extensions Installing websocket-extensions 0.1.2 Installing mime-types-data 3.2016.0521 Installing arel 7.1.4 Using bundler 1.13.6 Installing method_source 0.8.2 Installing thor 0.19.1 Installing tzinfo 1.2.2 Installing nokogiri 1.6.8.1 with native extensions Installing rack-test 0.6.3 Installing sprockets 3.7.0 Installing websocket-driver 0.6.4 with native extensions Installing mime-types 3.1 Installing activesupport 5.0.0.1 Installing loofah 2.0.3 Installing mail 2.6.4 Installing rails-dom-testing 2.0.1 Installing globalid 0.3.7 Installing activemodel 5.0.0.1 Installing rails-html-sanitizer 1.0.3 Installing activejob 5.0.0.1 Installing activerecord 5.0.0.1 Installing actionview 5.0.0.1 Installing actionpack 5.0.0.1 Installing actioncable 5.0.0.1 Installing actionmailer 5.0.0.1 Installing railties 5.0.0.1 Installing sprockets-rails 3.2.0 Installing rails 5.0.0.1 Bundle complete! 1 Gemfile dependency, 38 gems now installed. Bundled gems are installed into ./vendor/bundle.
[vagrant@currycurator rails]$ bundle exec rails new . --api -d mariadb Invalid value for --database option. Supported for preconfiguration are: mysql, oracle, postgresql, sqlite3, frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc. [vagrant@currycurator rails]$ bundle exec rails new . --api -d mysql Invalid application name rails, constant Rails is already in use. Please choose another application name. [vagrant@currycurator rails]$ bundle exec rails new currycurator --api -d mysql create create README.md create Rakefile create config.ru create .gitignore create Gemfile create app create app/assets/config/manifest.js create app/assets/javascripts/application.js create app/assets/javascripts/cable.js create app/assets/stylesheets/application.css create app/channels/application_cable/channel.rb create app/channels/application_cable/connection.rb create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/jobs/application_job.rb create app/mailers/application_mailer.rb create app/models/application_record.rb create app/views/layouts/application.html.erb create app/views/layouts/mailer.html.erb create app/views/layouts/mailer.text.erb create app/assets/images/.keep create app/assets/javascripts/channels create app/assets/javascripts/channels/.keep create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/bundle create bin/rails create bin/rake create bin/setup create bin/update create config create config/routes.rb create config/application.rb create config/environment.rb create config/secrets.yml create config/cable.yml create config/puma.rb create config/spring.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/application_controller_renderer.rb create config/initializers/assets.rb create config/initializers/backtrace_silencers.rb create config/initializers/cookies_serializer.rb create config/initializers/cors.rb create config/initializers/filter_parameter_logging.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_framework_defaults.rb create config/initializers/session_store.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create lib create lib/tasks create lib/tasks/.keep create lib/assets create lib/assets/.keep create log create log/.keep create public create public/404.html create public/422.html create public/500.html create public/apple-touch-icon-precomposed.png create public/apple-touch-icon.png create public/favicon.ico create public/robots.txt create test/fixtures create test/fixtures/.keep create test/fixtures/files create test/fixtures/files/.keep create test/controllers create test/controllers/.keep create test/mailers create test/mailers/.keep create test/models create test/models/.keep create test/helpers create test/helpers/.keep create test/integration create test/integration/.keep create test/test_helper.rb create tmp create tmp/.keep create tmp/cache create tmp/cache/assets create vendor/assets/stylesheets create vendor/assets/stylesheets/.keep remove app/assets remove lib/assets remove tmp/cache/assets remove vendor/assets remove app/helpers remove test/helpers remove app/views/layouts/application.html.erb remove public/404.html remove public/422.html remove public/500.html remove public/apple-touch-icon-precomposed.png remove public/apple-touch-icon.png remove public/favicon.ico remove app/assets/javascripts remove config/initializers/assets.rb remove config/initializers/session_store.rb remove config/initializers/cookies_serializer.rb run bundle install Fetching gem metadata from https://rubygems.org/.............. Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies... Installing rake 11.3.0 Using concurrent-ruby 1.0.2 Using i18n 0.7.0 Installing minitest 5.9.1 Using thread_safe 0.3.5 Using builder 3.2.2 Using erubis 2.7.0 Using mini_portile2 2.1.0 Using rack 2.0.1 Using nio4r 1.2.1 Using websocket-extensions 0.1.2 Using mime-types-data 3.2016.0521 Using arel 7.1.4 Using bundler 1.13.6 Installing byebug 9.0.6 with native extensions Installing ffi 1.9.14 with native extensions Installing rb-fsevent 0.9.8 Using method_source 0.8.2 Installing mysql2 0.4.5 with native extensions Installing puma 3.6.0 with native extensions Using thor 0.19.1 Using tzinfo 1.2.2 Using nokogiri 1.6.8.1 Using rack-test 0.6.3 Using sprockets 3.7.0 Using websocket-driver 0.6.4 Using mime-types 3.1 Installing rb-inotify 0.9.7 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 /home/vagrant/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20161025-26417-ebcrvt.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for ruby/thread.h... yes checking for rb_thread_call_without_gvl() in ruby/thread.h... yes checking for rb_thread_blocking_region()... no checking for rb_wait_for_single_fd()... yes checking for rb_hash_dup()... yes checking for rb_intern3()... yes checking for rb_big_cmp()... yes checking for mysql_query() in -lmysqlclient... no ----- mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', 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. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/vagrant/.rbenv/versions/2.3.1/bin/$(RUBY_BASE_NAME) --with-mysql-dir --without-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysql-config --without-mysql-config --with-mysql-dir --without-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysqlclientlib --without-mysqlclientlib To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0-static/mysql2-0.4.5/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5 for inspection. Results logged to /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0-static/mysql2-0.4.5/gem_make.out An error occurred while installing mysql2 (0.4.5), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.4.5'` succeeds before bundling. run bundle exec spring binstub --all bundler: command not found: spring Install missing gem executables with `bundle install`
おおーっと。mysql2というgemをいれてくれと言っている?
mysql2をいれようとするとmysql-develをいれろと言われる。うーん。
その後bungle installすれば入ったようです。
[vagrant@currycurator currycurator]$ bundle install Fetching gem metadata from https://rubygems.org/.......... Fetching version metadata from https://rubygems.org/.. Fetching dependency metadata from https://rubygems.org/. Resolving dependencies... Using rake 11.3.0 Using concurrent-ruby 1.0.2 Using i18n 0.7.0 Using minitest 5.9.1 Using thread_safe 0.3.5 Using builder 3.2.2 Using erubis 2.7.0 Using mini_portile2 2.1.0 Using rack 2.0.1 Using nio4r 1.2.1 Using websocket-extensions 0.1.2 Using mime-types-data 3.2016.0521 Using arel 7.1.4 Using bundler 1.13.6 Using byebug 9.0.6 Using ffi 1.9.14 Using rb-fsevent 0.9.8 Using method_source 0.8.2 Installing mysql2 0.4.5 with native extensions Using puma 3.6.0 Using thor 0.19.1 Using tzinfo 1.2.2 Using nokogiri 1.6.8.1 Using rack-test 0.6.3 Using sprockets 3.7.0 Using websocket-driver 0.6.4 Using mime-types 3.1 Using rb-inotify 0.9.7 Using activesupport 5.0.0.1 Using loofah 2.0.3 Using mail 2.6.4 Installing listen 3.0.8 Using rails-dom-testing 2.0.1 Using globalid 0.3.7 Using activemodel 5.0.0.1 Installing spring 2.0.0 Using rails-html-sanitizer 1.0.3 Using activejob 5.0.0.1 Using activerecord 5.0.0.1 Installing spring-watcher-listen 2.0.1 Using actionview 5.0.0.1 Using actionpack 5.0.0.1 Using actioncable 5.0.0.1 Using actionmailer 5.0.0.1 Using railties 5.0.0.1 Using sprockets-rails 3.2.0 Using rails 5.0.0.1 Bundle complete! 8 Gemfile dependencies, 47 gems now installed. Use `bundle show [gemname]` to see where a bundled gem is installed.
データベースを作成
[vagrant@currycurator currycurator]$ rails db:create Created database 'currycurator_development' Created database 'currycurator_test' MariaDB [(none)]> show DATABASES; +--------------------------+ | Database | +--------------------------+ | information_schema | | currycurator_development | | currycurator_test | | mysql | | performance_schema | | rails5 | +--------------------------+ 6 rows in set (0.02 sec)
テスト用アプリを立ち上げます。
[vagrant@currycurator currycurator]$ rails generate scaffold testapp name:string body:text invoke active_record create db/migrate/20161025114930_create_testapps.rb create app/models/testapp.rb invoke test_unit create test/models/testapp_test.rb create test/fixtures/testapps.yml invoke resource_route route resources :testapps invoke scaffold_controller create app/controllers/testapps_controller.rb invoke test_unit create test/controllers/testapps_controller_test.rb [vagrant@currycurator currycurator]$ rails db:migrate == 20161025114930 CreateTestapps: migrating =================================== -- create_table(:testapps) -> 0.0103s == 20161025114930 CreateTestapps: migrated (0.0104s) ========================== [vagrant@currycurator currycurator]$ rails server --binding=0.0.0.0 => Booting Puma => Rails 5.0.0.1 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.6.0 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop
GUIから3000番portを見てみます
かわいいかよ
おわりに
今回はここまで。次回はrailsアプリの立ち上げまで今回やった部分をansibleのpllaybookに書き足すとともに、実際に作りたいアプリを考えて、そのさわりを作ってみようと思います。