質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1507閲覧

Rails のデプロイについて教えてください。

koume

総合スコア458

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/03/03 08:35

編集2018/03/05 01:41

Rails5.1.3でWebアプリケーションの勉強をしながら、実際に公開することを目指して制作しています。
デプロイし、Webアプリケーションを公開したいのですがデプロイについてものすごく混乱しているので教えてください。

単純に自分で作ったWebアプリケーションを公開したいのです。

1,VPS(さくらのVPS)を利用する前提でお願いします。

・Capistranoを導入する必要はあるのでしょうか?

さくらのVPSを利用する場合はCapistranoなどは必要ないというのであればいいのですが
そのあたりの関係性がわかりません。

VPSにApache,Passenger,Centos,MySQL,Ruby,Rails,Node.js等を構築しファイル転送ツール(CyberDuck)で
Railsアプリケーションをサーバーに転送すれば動くものと思っていましたが、調べれば調べるほど
いろんな情報があり訳がわからなくなっています。この内容で構築するとして他にしなければいけないことを
教えていただけないでしょうか?

また、Capistrano がデプロイするためのツールだというのはわかりますが、あとでアプリに機能を追加したり
削除したりなどコードを変更するときにはCapistranoが必要になるのか?それともCyberDuckで転送しなおせば
コードの変更ができるのでCapistranoは必要ないとか、ファイルを転送しなおした場合データベースの中が
リセットされてしまうのではないか?など不安です。

どなたかご教示お願いします。

追記
サブディレクトリー運用かどうかのところですが、

新規にドメインをwonder128.comで取得しました。

config/environments/production.rb config.chibi = { staff: { host: 'wonder128.com', path: 'staff' }, admin: { host: 'wonder128.com', path: 'admin' }, customer: { host: 'wonder128.com', path: 'mypage' }, visitor: { host: 'wonder128.com', path: '' }, restrict_ip_addresses: false }

のように利用者別トップページのホスト名とURLパスを設定しています。
このような場合、httpd.conf にはどれを記述すればいいのでしょうか?
staff,admin,customerはログイン機能があり、visitorにはログイン機能はありません。
誰でもアクセスできるのはvisitor: { host: 'wonder128.com', path: '' }のページに
設定したいのです。(一般のユーザーがアクセスするページ)
staff,admin,customerにはhttps://wonder128.com/staff, /admin, /customerでアクセスし
ログインするというイメージです。

DNCにwonder128.comと設定すれば、全てのページにpathでアクセスできるものと考えていました。

的外れな質問なのかもしれませんが少し混乱していますので
お手数をお掛けしますが教えていただけないでしょうか?宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Capistrano は必須ではありませんよ。
まずは Capistrano なしで設置してみては。

いくつかハマリポイントがありますが,Rails アプリが出来上がっているなら,VPS 上で動作させるのはそれほど難しくありません。

以下,さくら VPS,CentOS,Apache という前提で。

現在,VPS で Apache が動き,Ruby と Passenger のインストールが完了し,必要な gem も揃い,Rails のファイル群がどこかのディレクトリーに設置され,rails console なども動く状態までいっているのですね?

であればあと一歩(というか二、三歩)です。

Passenger のインストールの最終段階で,「これを http.conf に書いとけや」っていうのが提示されましたよね。
それをそのとおりに記述し,Apache で configtest やって書き方が間違ってないか確認し,Apache の再起動をしておきます。

で,サブディレクトリー運用かどうかで話が違ってくるのですが,そこはどうでしょうか。

独自ドメインが無いとすると,www12335.sakura.ne.jp みたいなドメインですよね。で,

http://www12335.sakura.ne.jp/

で運用したいのか

http://www12335.sakura.ne.jp/myapp/

で運用したいのかによってちょっと設定が違います。後者だと一つのサーバーで複数のアプリが動かせます。

私はサブディレクトリーでしかやったことがないので,それで説明します。

上記の通り myapp というサブディレクトリーで運用することとします。

まず,httpd.conf に

RackBaseURI /myapp

って書いときます。httpd.conf を書き換えたあとは必ず configtest し,Apache の再起動をします。

そして,/etc/www/html/myapp から Rails アプリの public ディレクトリーにシンボリックリンクを張ります。(よく間違えて Rails アプリのルートにリンクしちゃうので気をつけて)

アセットの precompile をやらないとですね。これは

$ sudo rails assets:precompile RAILS_ENV=production RAILS_RELATIVE_URL_ROOT=/myapp

とします。RAILS_RELATIVE_URL_ROOT を正しく設定しないとサブディレクトリーではうまくいきません。

これで OK。

Rails のファイル群を,apache というユーザーから見えるようにしておくことを忘れないで。ファイルのユーザーを apache にすればいいでしょう。Rails アプリのルートで

$ sudo chown apache:apache -R .

でできます。

とくに,SQLite3 なんかでデータベースファイルのユーザーが違っていて動かないことがよくあります。

ファイルを変更したりアセットの precompile をやったりしたあとは Rails アプリを再起動しないと適用されません。

Apache を再起動すれば Rails アプリも再起動されるのですが,Rails アプリの tmp ディレクトリーに restart.txt という名前のファイルを作成・更新するだけで,次回アクセス時に自動的に再起動されます。
「作成・更新」というのは,初めてのときは作成するだけ,次回からはタイムスタンプが変われば OK です。中身は空でかまいません。
もっとも簡単にやるには,Rails アプリのルートディレクトリーで

$ sudo touch tmp/restart.txt

とやります。(ファイルがすでに存在してればタイムスタンプが更新されます)

ところで,ログインが必要なサイトを作るなら HTTPS 化は必須です。
そのため独自ドメインを取得します。
あとは Let’s Encrypt でやれば手軽だしタダです。
/etc/httpd/conf/httpd.conf の記述を /etc/httpd/conf.d/ssl.conf に移します。


追記

ちょっと補足します。

Rails アプリ内でリンクのパスを「レールに乗った書き方」にしていないと,サブディレクトリー運用で失敗します。
つまり,例えばユーザー一覧へのリンクパスを

rb

1link_to "ユーザー一覧", users_path

と書いておけばいいのですが(今の場合,:users でも OK),これを

rb

1link_to "ユーザー一覧", "/users"

なんて書くとダメです。
開発中は http://localhost:3000/ とかで動作確認するので,気づきにくいんですよね。

それから,うまくいかないときは Rails アプリの log/production.log はもちろんですが,Apache のエラーログ(/var/log/httpd/error_log)も見ましょう。

投稿2018/03/03 10:51

編集2018/03/03 11:02
scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koume

2018/03/05 01:43

回答のお礼が遅くなり失礼しました。サブディレクトリー運用かどうかのところで少し混乱しています。 質問内容を追記させていただきましたのでお手数ですが教えていただけないでしょうか? 宜しくお願いします。
scivola

2018/03/05 03:28

config.chibi が何なのか分かりませんが,要するにその Rails アプリのルートは https://wonder128.com/ なんですね。であればサブディレクトリー云々は忘れてください。 私が言っていたのは, https://wonder128.com/my_great_app/ https://wonder128.com/my_great_app/staff https://wonder128.com/my_great_app/admin https://wonder128.com/my_great_app/customer みたいな URL でやるのかどうか,ということでした。(一つのサーバーで複数の Rails アプリを動かす場合のやり方の一つ) koume さんの意図に従うと,httpd.conf の DocumentRoot を Rails アプリの public ディレクトリーにしておけばよいようです。
koume

2018/03/05 05:19

回答ありがとうございます。1つのサーバーで1つのアプリしか動かさないので 現状のまま進めてみます。今後とも宜しくおねがいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問