【问题标题】:How to generate controller/models/views inside lib folder? (Ruby on Rails)如何在 lib 文件夹中生成控制器/模型/视图? (Ruby on Rails)
【发布时间】:2019-12-17 02:06:57
【问题描述】:

我是 ruby​​ 的新手,遇到了这个问题。

rails generate model whatever/app/models/ 文件夹中创建一些文件。但是,如果我想在 lib 中生成这些内容,例如在/lib/modules/monitor/app/

我一直在寻找,但没有找到任何东西。我尝试将路径放在命令中,但它不起作用,它只是在 /app 文件夹中创建指定的路径。

现在我正在做的是创建一个控制器,例如,将创建的文件从 /app 复制到 /lib/modules/monitor/app,这不是很好,因为您必须手动复制所有文件。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么要在 lib 中包含模型?
  • 你所做的完全违反了 Rails MVC 约定。这与 Rails “约定优于配置”的整个概念背道而驰的想法或观点是什么?
  • 如果您确实想移动或复制文件夹,使用cp -R app/models/ lib/modules/wtf_am_i_doing_this/则无需一一进行
  • 说实话我真的不知道,但我开始在一家公司工作,他们有这样的情况,他们肯定有他们的理由。所以我必须在这个文件夹中不断创建控制器/模型/视图,我不想一直复制文件,使用命令会很容易。
  • 为什么不直接对它们进行符号链接呢?如果原始文件发生变化会怎样?需要再复制一遍吗??

标签: ruby-on-rails ruby model-view-controller lib generate


【解决方案1】:

似乎没有任何传统的 Rails 原因将文件从应用程序复制到 lib。 rails 应用程序甚至可以使用它们吗?我的猜测可能不是没有破坏很多东西。但是,如果您只是想使用 rails 生成器来生成文件并让它们自动复制到其他位置,您可能需要查看this gem

gem install listen

在使用 Rails 生成器之前,您需要编写一个 ruby​​ 脚本并从项目的根目录运行它,例如在文件 bin/file_duper.rb

#!/usr/bin/env ruby
require 'listen'
rails_root = Dir.exists?(Dir.pwd + '/app') ? Dir.pwd : nil
abort('This script must be run from rails root') unless rails_root
dest_folder = Dir.pwd + '/lib/modules/'
unless Dir.exists?(dest_folder)
  FileUtils.mkdir(dest_folder)
end

listener = Listen.to(rails_root, dest_folder) do |modified, added, removed|
  added.each do |file|
    FileUtils.cp(file, dest_folder + file.split('app/')[1])
  end
  modified.each do |file|
    FileUtils.cp(file, dest_folder + file.split('app/')[1])
  end
  removed.each do |file|
    FileUtils.rm(file, dest_folder + file.split('app/')[1])
  end
end

listener.start 
sleep

现在,在运行此脚本之前,请确保您位于 rails 项目根目录中。您可能希望以分离的方式运行此程序(在后台)。

ruby bin/file_duper.rb # running in terminal can be killed with ctrl + c

如果你想让它在后台运行,你可以像这样运行它

ruby bin/file_duper.rb &

这将使用 ruby​​ rb-fsevent 在后台运行多个进程。如果您需要停止这些进程,您可以这样做

pgrep -f rb-fseven | xargs kill

注意事项:此脚本未经过严格测试,可能存在缺陷。此外,这种类型的文件复制可能会导致 git 版本控制出现问题,因此假设您正在使用版本控制,您可能需要将lib/modules/ 添加到您的项目.gitignore 文件中。

【讨论】:

  • 非常感谢!!!顺便说一句,是的,rails 应用程序能够使用这些模块。所以虽然不是理想的,但它的工作原理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2011-08-02
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多