0
0

More than 3 years have passed since last update.

【Railways】RubyMineプロジェクトルートがRailsルートディレクトリ以外の時、Railways が動作しない

Last updated at Posted at 2020-08-29

結論

プロジェクトルートディレクトリにRakefileを作成する。

# Rakefile

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

# 以下に、プロジェクトルートディレクトリからRailsルートディレクトリの application.rb への相対パスを指定する
require_relative 'path_to_your_rails_app_root/config/application'

Rails.application.load_tasks

原因

Railswaysプラグインは、内部的にrake routesを実行しているが、これはRubyMineのAPIを利用しているらしい。1
(おそらく、RubyMineのRun Anythingを利用していると思われる)
Run Anythingでのコマンド実行は、プロジェクトルートディレクトリで行われる。
そのため、Run Anythingでrakeコマンドを実行する場合、プロジェクトルートディレクトリにRakefileを作成する必要がある。
これに関しては、公式ヘルプにも記述があった。2

背景

個人的にRailwaysはとても重宝しており、多用していた。
しかし、アプリケーションにフロントエンドやTerraformを追加するにあたり、ディレクトリを分けて管理したくなった。
そうすると、今まではプロジェクトルートディレクトリ = Rialsルートであったが、以下のような構成になる。

.
├── terratorm 
├── frontend
├── backend # Rails App
├── docker-compose.yml
└── README.md

Rakefileさんがいなくなってしまった。

この状態ではRailwaysは動かず、困っていた。
backendディレクトリをRubyMineで開けば動くが、それだと他のディレクトリにアクセスしづらく、利便性が落ちてしまう。
開発するにあたりRailwaysを手放したくはなく、なんとかならないかと考えていた。

追加情報

ちなみに、Railswaysの実行タスクは設定で変えることができる。
(Rialsways > Settings > Rake task name)
デフォルトではroutesになっており、プレフィックスでrakeを与えてコマンドを実行していることがわかる。
そのため、最初はこの実行コマンドを変えることで対応できるのではないかと考えたが、無理だった。
内容を-f path_to_your_rails_root/Rakefile rouetsに変更し、rake -f path_to_your_rails_root/Rakefile rouetsが実行されるようにしたが、以下のエラーが出てしまった。

rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:698:in `raw_load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:104:in `block in load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:103:in `load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:82:in `block in run'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'

-fオプションでRakeファイルを指定しているのに、なぜ、、、。
絶対パスで指定してもダメだった。

さらには、Run Anythingでは-fフラグを付けると、プロジェクトルートにRakefileがなくても実行できた。
内部的にRun Anythingを利用していると考えていたが、もしかしたら違うのかもしれない。

いったいRailswaysのタスクはどこで実行されているのだろうか、、、。

まとめ

今までRakefileは特に意識しておらず、今回調べたときにその役割を知った。
調べる中でrakeについて詳しくなれたのは今回の収穫だった。

この記事がどなたかのお役に立てたら幸いです。

0
0
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
0
0