#はじめに
自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。
今回は、Ruby On Railsをインストールします。
どういった構成が正解かは判断がつきかねているのですが、今のところこんな感じです・・(^^;
#目次
- 申し込み
- CentOS7インストール
- SSH接続
- Apache・PHPインストール
- MariaDBインストール
- FTP接続
- sftp接続
- phpMyAdminインストール
- 環境のバックアップ
- Ruby On Railsインストール
- RailsプロジェクトをGitで共同開発
#10.Ruby On Railsインストール
##必要パッケージインストール
###Node.jsインストール
Node.jsのバージョンを管理する「n」パッケージをインストールします。
鶏と卵のような話ですが、「n」パッケージインストールにはnpmが必要で、npmにはNode.jsが必要ということで、Node.jsをインストールする為にまずnpmとNode.jsをインストールします。
####npmインストール
$ sudo yum install epel-release
####node.jsインストール
$ sudo yum install nodejs npm
####「n」パッケージインストール
$ sudo npm install -g n
####「n」パッケージを使ってNode.jsをインストール
最新版は「latest」、安定版は「stable」でインストールできます。
$ sudo n latest
$ node -v
v11.13.0
$ sudo n stable
$ node -v
v10.15.3
####「n」パッケージの使い方
コマンド | 内容 |
---|---|
n | インストールしているバージョンの表示やバージョンを切り替える |
n ls | すべてのバージョンを表示する |
n --latest | 最新バージョンを表示する |
n --lts | 安定バージョンを表示する |
n latest | 最新バージョンをインストールする |
n stable | 安定バージョンをインストールする |
n [version] | 指定したバージョンをインストールする |
n rm [version] | 指定したバージョンを削除する |
n prune | すべてのバージョンを削除する |
その他もろもろインストール
$ sudo yum -y install gcc make openssl openssl-devel gcc-c++ mysql-devel readline-devel libxml2-devel libxslt-devel git bzip2 zlib-devel sqlite-devel
$ sudo npm install yarn -g
##Rubyインストール
###rbenvインストール
rbenvは、複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことを可能としてくれるツールです。
まずこれをインストールします。
$ cd /usr/local
$ sudo git clone https://github.com/rbenv/rbenv.git
$ sudo mkdir rbenv/plugins && cd rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git
ログイン時にrbenvを使えるようにする初期化スクリプトを記述します。
$ sudo vi /etc/profile.d/rbenv.sh
以下を追加
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
パーミッションの変更
$ sudo chmod -R 777 /usr/local/rbenv
設定を反映させるために、ここで一度ログアウトして再ログインします。
再ログインしたら、確認。
$ rbenv install -l
2.6.5
###Rubyインストール
rbenvを使ってRubyをインストールします。
インストール可能なRubyバージョン一覧を表示します。
$ rbenv install -l
バージョン2.6.5のRubyをインストールします。
$ rbenv install 2.6.5
全体で使用するRubyのバージョンを指定
$ rbenv global 2.6.5
確認
$ ruby --version
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
##Rails環境構築
###GemとBundler
GemはRubyGems(Ruby用のパッケージ管理ツール)で管理されるrubyのアプリケーションやライブラリです。
Bundlerは、gem動詞の互換性を保ちながらパッケージの種類やバージョンを管理するツールです。
####gem
確認
$ which gem
/usr/local/rbenv/shims/gem
最新版にアップデート
$ gem update --system
バージョン確認
$ gem -v
3.0.6
####bundlerインストール
システムのgemにはbundlreのみインストールし、bundler以外のものはプロジェクトのvendor/bundleに格納します。
ので、ここではbundlerのみインストール。
$ gem install bundler
###プロジェクトのフォルダ
以前、4. Apache・PHPインストールでApacheをインストールした時に作成した、/var/www/の中にappというフォルダを作成し、その中にプロジェクトを作っていきます。
フォルダ作成
$ mkdir /var/www/app
Webコンテンツに複数のユーザが操作出来るように作成したグループに権限を与えます。
$ sudo chown root:webadmin /var/www/app/
$ sudo chmod 2775 /var/www/app/ -R
###「bundle exec」の省略設定
railsコマンドをプロジェクト内のvendor/bundleに格納すると、railsコマンド呼出時に、「bundle exec rails server」のように「bundle exec」を付けて呼び出す必要があります。
このbundle execを省略できるように設定します。
この設定は、各ユーザーごとに必要です。
スクリプトをダウンロード
$ cd
$ curl -L https://github.com/gma/bundler-exec/raw/master/bundler-exec.sh > ~/.bundler-exec.sh
bundler-exec.shを編集
$ vi ~/.bundler-exec.sh
リストにrailsを追記(下の方にあります)
・
・
(省略)
・
・
unicorn
unicorn_rails
wagon
rails
}"
define-bundler-aliases
unset -f define-bundler-aliases
反映させます。
$ source ~/.bashrc
###利用可能なRailsのバージョンの確認
$ gem query -ra -n "^rails$"
現時点で最新は6.0.1でしたが、以下のプロジェクトでは5.2.4を使います。
##プロジェクト作成
###プロジェクト用フォルダ
bundlerを利用する為、「rails new 」する前に、フォルダを作成します。
$ mkdir /var/www/app/HelloWorld
$ cd /var/www/app/HelloWorld
ローカルのrubyのバージョンを指定。
$ rbenv local 2.6.5
確認
$ rbenv version
2.6.5 (set by /var/www/app/HelloWorld/.ruby-version)
###Gemfile
Gemfileの雛形作成
$ bundle init
riting new Gemfile to /var/www/app/HelloWorld/Gemfile
Gemfileの編集
$ vi Gemfile
railsのバージョン5.2.4を使用できるように下記のように修正します。
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# コメントを外し、バージョンを記述
gem "rails", "5.2.4"
###gemのインストール
$ bundle install --path vendor/bundle
インストールのメッセージが流れ、無事に終わるかと思ったのですが、こんなメッセージが・・・
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.
Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.
For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
「i18nの設定方法が変わったので気を付けなさい」ということみたいです。
だだ、今回はRailsのバージョン5.2.4にしていますので、I18n (>= 1.1.0) and Rails (< 5.2.2)の条件には引っ掛からないので大丈夫だと思います。
###新規プロジェクト作成
これでやっとrailsコマンドが使えるようになりましたので、プロジェクトを作成します。
フォルダは作成済みですので、プロジェクト名の指定は不要です。
$ rails new .
.ruby-versionを上書きしますか?と聞いてきますのでYを入力。
Overwrite /var/www/app/HelloWorld/.ruby-version? (enter "h" for help) [Ynaqdhm]Y
Gemfileを上書しますか?と聞いてきますのでYを入力。
Overwrite /var/www/app/HelloWorld/Gemfile? (enter "h" for help) [Ynaqdhm]Y
順調に行くと思いきや、以下のメッセージが出ました。
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Bundler could not find compatible versions for gem "sprockets":
In snapshot (Gemfile.lock):
sprockets (= 4.0.0)
In Gemfile:
sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
sprockets (>= 2.8, < 4.0)
rails (~> 5.2.4) was resolved to 5.2.4, which depends on
sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
sprockets (>= 3.0.0)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
run bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
依存関係に問題があるから、「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」を実行しろということのようです。
あと、「bundle update」を実行すると、スナップショットを最初から再構築します、と。
なので、やってみます。
$ bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies......
Bundler could not find compatible versions for gem "sprockets":
In snapshot (Gemfile.lock):
sprockets (= 4.0.0)
In Gemfile:
sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
sprockets (>= 2.8, < 4.0)
rails (~> 5.2.4) was resolved to 5.2.4, which depends on
sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
sprockets (>= 3.0.0)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
$ bundle update
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
・
・
(以下略)
・
・
と、同じようなメッセージが・・・
とりあえず、再度「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」して、「bundle update」すると、「Bundle updated!」と出たので、とりあえずOKかなと。
##サーバー起動
###3000のポートを開ける
####ファイアウォールを使っている場合
ポートを開ける
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reload
####さくらVPSのパケットフィルタを使っている場合
- さくらVPSコントロールパネルにログインし、サーバーを選択
- [パケットフィルタ]-[パケットフィルタ設定へ>]を選択
- [+任意の解放ポート設定を追加する]ボタンをクリック
- [TCP][3000]を設定
- [設定]ボタンをクリック
###サーバー起動
$ rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
無事起動しました。
#次回