如何以编程方式生成自定义Rails应用程序

时间:2017-02-16 18:16:21

标签: ruby-on-rails ruby code-generation

我想在Ruby中以编程方式创建自定义Rails 5.x应用程序。给定应用程序的规范,我想生成一个包含该应用程序的Rails应用程序文件夹。我可以想到一些这样做的方法,但我不确定哪个是惯用的Rails方法。

理想情况下,我想要下面(5)中描述的方法。 1-4是我尝试过的解决方法,但如果可行的话,我更喜欢程序化方法。

这里的例子是众所周知的博客应用程序:

  1. 使用系统命令:

    `# my_app_maker.rb`
    `rails new blog`
    `cd blog`
    `rails generate resource Post title:string body:text`
    `rails db:migrate`
    `# <use a previously created template to modify the controller, layouts and views based on the app specification>`
    
  2. 或者,我可以做类似的事情,但使用脚手架,然后根据需要修改模板。

  3. 使用发电机或发动机。我不知道究竟是怎么做到的。

  4. 预先创建Rails应用程序并进行模板化,然后使用它来生成Rails应用程序。

  5. 理想情况下,我希望API能够以编程方式完成此操作。类似的东西:

    app = Rails::App.new('blog', 'path/to/save/app')
    post = app.resources.add('Post')
    post.controllers.add_actions(['index', 'new']
    # ...
    
  6. 最常用的方法是什么?

1 个答案:

答案 0 :(得分:2)

根据我的经验, rails应用程序模板非常适用于此特定工作 我认为这正是您所需要的:一个特殊的API,包装常见的系统命令,以创建程序化的新rails应用程序。

Rails应用程序模板

它们是生成整个rails应用程序的生成器。

您只需将命令放在ruby文件中,然后使用以下命令创建应用程序:

$ rails new blog -m ~/template.rb

以下是指南中的示例:

# template.rb
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")

after_bundle do
  git :init
  git add: "."
  git commit: %Q{ -m 'Initial commit' }
end

资源

Creating and Customizing Rails Generators & Templates guide提供了有关生成器一般如何工作的大量解释,Rails Application Templates guide详细说明了可用于应用程序模板的API。

另一个好的资源是查看Thoughtbot的suspenders gem的实现。它是一个使用尽管用于引导新项目的rails模板。

我自己创建了一个rails生成器来引导新的应用程序,我需要在所有项目和常见配置中使用宝石。在创建新项目时,它为我节省了大量时间。