12
12

More than 5 years have passed since last update.

Rails 4.2.4でMountable Engineの設定

Last updated at Posted at 2015-12-17

環境

  • Ruby 2.2.3
  • Rails 4.2.4

Rails4.2.4で、Mountable Engineを使おうとして設定している際に、
サブドメインの設定ではまったので、設定手順とあわせて、はまったポイントをメモ。

Mountable Engineを作成

$ rails plugin new myenginename --mountable

上記コマンドを実行すると、app/の下に、myenginenameというディレクトリが作成され、
その中身は、Railsとほぼ同じ構成になっている。
Railsの中にさらにRailsがインストールされた感じ。

Gemfileに追記

次に、親アプリケーションのGemfileに下記の記述をし、
親アプリケーションから呼び出せるようにする。

Gemfile
gem "myenginename", path: "myenginename"

mount設定

次に、親アプリケーションのconfig/routes.rbで、mountの設定。
方法は2通り。

1, 階層を切る場合

http://サイトドメイン/myenginenameでアクセスさせる場合は下記の設定。

config/routes.rb
mount Myenginename::Engine => '/myenginename'

2, サブドメインでアクセス可能にする場合

下記の記述をすると、
mountしたEngineに、サブドメインでアクセスできるようになるらしい。
ex)http://myenginename.ドメイン/

config/routes.rb
mount Myenginename::Engine => '/', constraints { subdomain: 'myenginename' }

しかし!! この設定をしたら、railsコマンドでエラーが出るようになった!

例えばrails sをすると

$ rails s
(略)
/home/myuser/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in 
    `load': /home/myuser/htdocs/config/routes.rb:64: syntax error, unexpected ':', expecting '}' (SyntaxError)
  mount Myenginename::Engine => '/', constraints { subdomain: 'myenginename' }

syntax errorが出る。
なぜだ?参考記事の手順通りにやったのに。。。

よくよく見てみると、参考記事に書かれている、config/routes.rbの構文に間違いが・・・
正しくは下記だった。

config/routes.rb
mount Myenginename::Engine => '/', constraints: { subdomain: 'myenginename' }

「constraints」のうしろにコロンが必要だった。
ただそれだけ(汗)

気を取り直して、設定の続きを。

gemspecの設定

作成したEngineのディレクトリの直下にある、gemspecファイルの設定をする。

myenginename/myenginename.gemspec
$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "myenginename/version"

# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "myenginename"
  s.version     = myenginename::VERSION
  s.authors     = ["authorname"]
  s.email       = ["メールアドレス"]
  s.homepage    = "サイトのURL"
  s.summary     = "アプリケーションの説明"
  s.description = "アプリケーションの説明"
  s.license     = "MIT"

  s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
  s.test_files = Dir["test/**/*"]

  s.add_dependency "rails", "~> 4.2.4"

  s.add_development_dependency "sqlite3"
end

これで、基本的な設定は完了。
下記の記事を参考にしました。

[参考]
新規サービスの管理画面を短期間で見栄え良く実装する

[関連記事]
Rails4のMountable Engineで、link_toに:method => deleteを指定しても、Getアクセスになってしまう

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12