- 更新日: 2017年2月13日
- Rails
Rails+MySQLでアプリを作成する導入部分の手順
壊してはやり直してと何度も繰り返すので、すぐに見返すことができるようにまとめておきます。rails_projects 以下に Rails アプリを作ると前提します。
— 環境 —
Rails 5.0.1
1 2 3 4 |
$ pwd $ /path/to/rails_projects |
bundle init 後、 Gemfile に rails を指定して bundle install
まずは rails アプリ用のディレクトリを作り、bundle init。
1 2 3 4 5 |
$ mkdir railsapp $ cd railsapp $ bundle init |
bundle init で生成されたGemfileを編集。
1 2 3 4 5 6 |
$ vi Gemfile source "https://rubygems.org" gem 'rails' |
以上、gem ‘rails’ だけを指定。rails 自体も vendor/bundle に配置して、rails コマンドを使う際は、bundle exec で行う。
そして、gem(ここでは rails とその依存パッケージのみ) がインストールされるパスを vendor/bundle と指定して bundle install。
1 2 3 |
$ bundle install --path vendor/bundle |
rails new で rails アプリを新規作成
続いて、rails アプリを新規作成。
1 2 3 |
$ bundle exec rails new . --skip-test-unit --database=mysql |
ここで、Gemfile の上書き確認を聞かれるので Y(Yes)。–skip-test-unit のオプションは、RSpec を使うため。–database=mysql は MySQL をデータベースとして利用する場合に指定する。
【追記 2017/02/13】
いつからか不明なのだけど(おそらく Rails 5 から?)、rails new コマンドで自動的に bundle install も走るようになったので、bundle install を実行したくない場合は –skip-bundle のオプションも追加します。
1 2 3 |
$ bundle exec rails new . --skip-test-unit --skip-bundle --database=mysql |
【追記ここまで】
Gemfile を編集
Gemfile を編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
$ vi Gemfile source 'https://rubygems.org' ruby '2.3.3' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end # Rails default gem 'rails', '~> 5.0.1' gem 'mysql2', '>= 0.3.18', '< 0.5' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.2' gem 'jquery-rails' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' gem 'bcrypt', '~> 3.1.7' # gem 'therubyracer', platforms: :ruby # gem 'redis', '~> 3.0' # // Rails default # Nokogiri ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'YES' gem 'nokogiri' # Assets gem 'bootstrap-sass' gem 'sass' gem 'font-awesome-rails' gem 'jquery-turbolinks' # Meta tags, Breadcrumbs, Paging, Locale gem 'meta-tags' gem 'gretel' gem 'will_paginate' gem 'bootstrap-will_paginate' gem 'i18n_generators' # Admin, Monitor # ref. http://stackoverflow.com/questions/42191475/rails-5-active-admin-installation-issue gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin' gem 'inherited_resources' # Debug gem 'pry-rails' gem 'pry-doc' # Auth gem 'devise' gem 'omniauth' gem 'omniauth-twitter' gem 'omniauth-facebook' # Others gem 'activerecord-session_store' gem 'whenever', :require => false # Grouping group :staging, :vagrant, :production do # Server gem 'unicorn' end group :development, :test do gem 'byebug', platform: :mri gem 'pry-byebug' gem 'rspec-rails' gem 'faker' end group :development do # Server gem 'puma', '~> 3.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-commands-rspec' # Deploy gem 'capistrano' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-bundler' gem 'capistrano3-unicorn' # Debug gem 'bullet' gem 'web-console', '>= 3.3.0' gem 'listen', '~> 3.0.5' end group :test do gem 'selenium-webdriver' gem 'capybara' gem 'factory_girl_rails' gem 'database_cleaner' gem 'launchy' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] |
bundle install
Gemfile を編集し終えたら、続いて bundle install。–without production のオプションを付ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ bundle install --without production ... Your bundle is complete! Gems in the group production were not installed. It was installed into ./vendor/bundle Post-install message from capybara: IMPORTANT! Some of the defaults have changed in Capybara 2.1. If you're experiencing failures, please revert to the old behaviour by setting: Capybara.configure do |config| config.match = :one config.exact_options = true config.ignore_hidden_elements = true config.visible_text_only = true end If you're migrating from Capybara 1.x, try: Capybara.configure do |config| config.match = :prefer_exact config.ignore_hidden_elements = false end Details here: http://www.elabs.se/blog/60-introducing-capybara-2-1 $ bundle update $ bundle install |
最後のところに Capybara からお知らせメッセージが出ましたが、bundle install は無事に成功。このようにインストールした gem からのメッセージが表示される場合があります。
bundle install の際に付けたオプション –path vendor/bundle や –without production などは、自動的に .bundle/config に追記されるので、次回の bundle install の際にはそれらのオプションを付けなくても自動で付けてくれる。
.gitignore を編集
続いて .git で管理しないファイルを .gitigonore に書く。
.gitignore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
### https://raw.github.com/github/gitignore/2f7c4e80629d1b02c9e1bce9fc54628ed620d2d6/rails.gitignore *.rbc capybara-*.html .rspec /log /tmp !/log/.keep !/tmp/.keep /db/*.sqlite3 /db/*.sqlite3-journal /public/system /coverage/ /spec/tmp **.orig rerun.txt pickle-email-*.html # TODO Comment out these rules if you are OK with secrets being uploaded to the repo config/initializers/secret_token.rb config/secrets.yml config/database.yml config/settings.yml config/newrelic.yml # dotenv # TODO Comment out this rule if environment variables can be committed .env ## Environment normalization: /.bundle /vendor/bundle /vendor/bundler # these should all be checked in to normalize the environment: # Gemfile.lock, .ruby-version, .ruby-gemset # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc # if using bower-rails ignore default bower_components path bower.json files /vendor/assets/bower_components *.bowerrc bower.json # Ignore pow environment settings .powenv # Ignore Byebug command history file. .byebug_history # for Mac and other files. .DS_Store README.rdoc README.md doc/ *.swp *~ .project .idea .secret *.sassc .sass-cache # yarn module /vendor/node_modules |
シークレットトークンを動的に生成するコードを作成
1 2 3 |
$ vi config/initializers/secret_token.rb |
config/initializers/secret_token.rb の中身は以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
require 'securerandom' def secure_token token_file = Rails.root.join('.secret') if File.exist?(token_file) # Use the existing token. File.read(token_file).chomp else # Generate a new token and store it in token_file. token = SecureRandom.hex(64) File.write(token_file, token) token end end Railsapp::Application.config.secret_key_base = secure_token |
RSpec インストール
RSpec をインストール。
1 2 3 |
$ bundle exec rails generate rspec:install |
Git リポジトリを初期化
Rails アプリを git の管理下にします。
1 2 3 4 5 |
$ git init $ git add . $ git commit -m "Initial commit" |
Rails アプリ用のMySQL・DBユーザーを作成
MySQL にログインしてDBユーザーを作成します。
1 2 3 4 |
$ mysql -u root -p Enter password: |
DBユーザーを作成。
1 2 3 |
mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザー名@localhost IDENTIFIED BY 'パスワード'; |
ユーザーの確認。
1 2 3 4 |
mysql> select host,user from mysql.user; mysql> quit |
config/database.yml の編集
config/database.yml を以下のように編集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
$ vi config/database.yml # 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 database: railsapp_development pool: 5 username: DBユーザー名 password: DBパスワード socket: /tmp/mysql.sock host: localhost charset: utf8 collation: utf8_general_ci # 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 database: railsapp_test pool: 5 username: DBユーザー名 password: DBパスワード socket: /tmp/mysql.sock host: localhost charset: utf8 collation: utf8_general_ci production: adapter: mysql2 encoding: utf8 database: railsapp_production pool: 5 username: DBユーザー名 password: DBパスワード socket: /tmp/mysql.sock host: localhost charset: utf8 collation: utf8_general_ci |
database.yml は https://github.com/cloud66/rails4-mysql-sample/blob/master/config/database.yml あたりを参考に編集。
database: は「アプリ名_development」のように指定する。test, production も同様に。
日本語での利用を考慮して、charset: utf8, collation: utf8_general_ci を設定して照合順序を指定しています。
Rails – ActiveRecordでデフォルトの照合順序を変更する – Qiita [キータ]
rake コマンドでDB作成
続いて rake コマンドでデータベースを作成。
1 2 3 |
$ bundle exec rake db:create --trace |
作成されたデータベースを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ mysql -u root -p Enter password: mysql> show databases; +----------------------+ | Database | +----------------------+ | information_schema | | mysql | | performance_schema | | railsapp_development | | railsapp_test | +----------------------+ 5 rows in set (0.00 sec) |
config/application.rb の設定
config/application.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
module Railsapp class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. # defalt time zone config.time_zone = 'Tokyo' # generator config.generators do |g| g.assets false g.helper false g.test_framework :rspec, fixture: true, fixture_replacement: :factory_girl, dir: 'spec/support/factories', view_specs: false, routing_specs: false, helper_specs: false, integration_tool: false end # i18n config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] config.i18n.default_locale = :ja config.i18n.available_locales = [:ja] # for bootsrap-sass config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) # to autoload lib/* config.autoload_paths += %W(#{config.root}/lib) end end |
上記のようにデフォルトの設定を好みで追加します。タイムゾーン、ジェネレーター、i18n、アセット、ロードパスなどの設定です。
rails generate して開発サーバーを起動
コントローラーを生成して、開発用ウェブサーバーを起動。Rails 4までは WEBRick でしたが、Rails 5 からは開発用サーバーが Puma に変更されています。
1 2 3 4 |
$ bundle exec rails generate controller Hello index $ bundle exec rails s |
http://localhost:3000/hello/index にアクセスして動作確認。
作成した Hello#index コントローラーを削除する場合は以下。
1 2 3 |
bundle exec rails destroy controller Hello index |
あとは開発を進める。うーん Rails 楽しいですね!
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
- 初回公開日: 2013年9月6日
Leave Your Message!