如何创建模块名与路径无关的Rails应用?
如何在Rails创建应用时指定独立于路径的自定义模块名
嘿,我来帮你理清楚这个问题:目前Rails官方的rails new命令确实没有像你设想的--module这类直接指定自定义模块名的选项,你翻遍帮助文档没找到相关内容完全正常,因为这个功能压根不在默认的参数列表里😅
不过除了你现在用的「先创建应用再重命名目录」的方法,还有几个更高效的替代方案,能帮你一步到位:
方案1:用Rails应用模板批量修改
如果需要经常这么做,写个简单的模板文件就能一劳永逸:
- 新建一个名为
custom_module_template.rb的文件,把下面的代码放进去(这里以目标模块名为FooApp为例):
# 替换application.rb里的模块声明 gsub_file "config/application.rb", /module .+/, "module FooApp" # 替换环境配置文件里的应用引用 gsub_file "config/environment.rb", /Rails\.application\.initialize!/, "FooApp::Application.initialize!" %w[development production test].each do |env| gsub_file "config/environments/#{env}.rb", /Rails\.application\.configure do/, "FooApp::Application.configure do" end # 替换路由文件里的应用引用 gsub_file "config/routes.rb", /Rails\.application\.routes\.draw do/, "FooApp::Application.routes.draw do" # 修正测试助手的路由引用(如果用Minitest的话) gsub_file "test/test_helper.rb", /class ActiveSupport::TestCase/, "class ActiveSupport::TestCase\n include FooApp::Engine.routes.url_helpers"
- 然后用这个模板创建应用:
rails new ./foo_app_rails -m ./custom_module_template.rb
这样生成的应用直接就用FooApp作为模块名,不用再手动改一堆文件。
方案2:创建后手动修改核心文件
如果只是偶尔需要,直接改几个关键文件也很快:
config/application.rb:把顶部的module FooAppRails改成module FooAppconfig/environment.rb:把Rails.application.initialize!替换成FooApp::Application.initialize!config/environments/development.rb、production.rb、test.rb:把每个文件开头的Rails.application.configure do改成FooApp::Application.configure doconfig/routes.rb:把Rails.application.routes.draw do改成FooApp::Application.routes.draw do
关于你看到的--skip-namespace选项
顺便说下,你搜索到的--skip-namespace只针对孤立的Rails引擎,不是普通的Rails应用,所以对你的场景完全不适用,不用管它。
总的来说,虽然没有直接的命令行选项,但用模板或者手动修改的方式都能轻松实现你的需求,模板方法更适合重复使用的场景哦~
内容的提问来源于stack exchange,提问作者devoutsalsa
相关产品推荐
相关产品推荐

