質問: { 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でアクセスできるものと考えていました。 的外れな質問なのかもしれませんが少し混乱していますので お手数をお掛けしますが教えていただけないでしょうか?宜しくお願いします。
回答: 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 アプリ内でリンクのパスを「レールに乗った書き方」にしていないと,サブディレクトリー運用で失敗します。 つまり,例えばユーザー一覧へのリンクパスを ``` link_to "ユーザー一覧", users_path ``` と書いておけばいいのですが(今の場合,`:users` でも OK),これを ``` link_to "ユーザー一覧", "/users" ``` なんて書くとダメです。 開発中は `http://localhost:3000/` とかで動作確認するので,気づきにくいんですよね。 それから,うまくいかないときは Rails アプリの log/production.log はもちろんですが,Apache のエラーログ(/var/log/httpd/error_log)も見ましょう。