Railsで管理用のアプリをnamespaceで同居させるときのメモ
やりたいこと
- 管理アプリもフロントアプリも同じプロジェクト内で共有するのがいいに決まってる。と思ってる
- とはいえフロントからアクセスされないようにネットワーク設定以外に、アプリ的にも対応しておきたい。
- 管理アプリは/adminというプレフィクスパスをつける
ルーティング
- :namespaceを入れる
namespace :admin do resources :hoge end
ルーティングのテストはだいじだと思っている
# AdminWeb it "routes to #index" do expect(get: "/admin/hoges") .to route_to(action: "index" , controller: "admin/hoges") end
controller
- /adminサブディレクトリ切る
- application_controller.rb
class Admin::ApplicationController < ActionController::Base layout 'admin/layouts/application' ~snip~
- 他のコントローラは、このAdmin::ApplicationControllerを継承する。
- layoutの指定大事。フロントと同じデザインはふつう使わないべ。
views
- /adminサブディレクトリ切る。
- layoutファイルでCSSとJSの指定をする
~snip~ <%= stylesheet_link_tag "admin/application", :media => "all" %> <%= javascript_include_tag "admin/application" %> ~snip~
ただこれだとassetpipelineの仕様上、namespaceなしのapplication.jsなどで
//= require_tree .
しちゃうと、adminディレクトリ以下も読み込まれてしまうので、namespaceなしのアプリでもディレクトリ切って、指定しないと他のアプリとリソースがまざってしまうので、注意。
assets
- 上記のとおり、それぞれadminディレクトリを切る。
こんなもんでしょうか。
なお、/adminなんてクラック目的のbotにまず最初に当られるパスだから、セキュリティ的な対処はちゃんとしてください。ネットワーク的に分断するのが一番だと思うけど、ムリなら、Webサーバで工夫、あと
- サブドメイン限定( constraints subdomain: subdomain doを使う)にする
- 認証機構
などなど、アプリでできることもやっておくべき。
- 出版社/メーカー: セガ
- 発売日: 2010/12/16
- メディア: Video Game
- 購入: 18人 クリック: 164回
- この商品を含むブログ (55件) を見る