【问题标题】:Rails: Creating new Ruby on Rails app in existing directoryRails:在现有目录中创建新的 Ruby on Rails 应用程序
【发布时间】:2018-03-01 23:59:14
【问题描述】:

我已经离开 Ruby on Rails 开发一段时间了,经历了几次系统更新。这发生在 Mac OS X Sierra 上,其系统版本为 Ruby (2.0.0p648) 和 Rails 4.0.2。

appname 目录不存在时,创建新应用程序 (rails new appname) 可以正常工作 --- 该命令创建应用程序并按应有的方式填充它。但是,尽管所有指南和教程都说了什么,但当这样的目录存在时(即使它是空的)它也会失败。你也不能创建一个空目录,cd进去,然后运行rails new .

失败命令的输出如下所示:

存在
/Library/Ruby/Gems/2.0.0/gems/railties-4.0.2/lib/rails/generators/app_base.rb:97:in create_root': uninitialized constant Rails::Generators::AppBase::FileUtils (NameError) from (eval):1:in create_root' 来自 /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/command.rb:27:in run' from /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command' 来自 /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:133:in block in invoke_all' from /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:133:in each' 来自 /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:133:in map' from /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:133:in invoke_all' 来自 /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/group.rb:232:in dispatch' from /Library/Ruby/Gems/2.0.0/gems/thor-0.20.0/lib/thor/base.rb:466:in start' 来自 /Library/Ruby/Gems/2.0.0/gems/railties-4.0.2/lib/rails/commands/application.rb:43:in <top (required)>' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:68:in require' 来自 /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:68:in require' from /Library/Ruby/Gems/2.0.0/gems/railties-4.0.2/lib/rails/cli.rb:15:in ' 来自 /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:68:in require' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:68:in require' 来自 /Library/Ruby/Gems/2.0.0/gems/railties-4.0.2/bin/rails:9:in <top (required)>' from /usr/bin/rails:22:in load' 来自 /usr/bin/rails:22:in `'

如何让 rails 能够在现有目录中创建应用程序?

【问题讨论】:

    标签: ruby-on-rails ruby macos rubygems


    【解决方案1】:

    在网上搜索了同样的问题无果后,我直接去了报告的来源:/Library/Ruby/Gems/2.0.0/gems/railties-4.0.2/lib/rails/generators/app_base的第97行。 rb。该行如下所示:

    FileUtils.cd(destination_root) unless options[:pretend]

    根据报错信息,找不到FileUtils,将其视为未初始化的常量。这一行也是 app_base.rb 文件中唯一使用FileUtils 的地方。

    我转到文件顶部并将require 'fileutils' 添加到其要求中。我保存了它(这需要管理员密码),rails new . 运行良好。

    虽然这解决了眼前的问题,但我仍有疑问。这是否一直存在,我没有注意到,或者它是否像我猜测的那样在升级后出现(很可能是从 Ruby 1.8 或 1.9 到 Ruby 2.0)。是什么变化导致的?

    【讨论】:

    • 谢谢,我在将近一年后的今天遇到了完全相同的问题。你有没有向 Rails 团队提交过问题?我想知道这是否已在 Rails 5 中修复?
    【解决方案2】:

    对我来说,我只需要一种在现有目录中创建 Rails 应用程序的方法。

    该目录中已经有一个 .git 文件夹,我还想使用当前应用程序用于 rails 应用程序的相同 git 存储库。

    我是这样做的

    我所要做的就是 cd 进入应用程序所在的文件夹:

    cd myapp
    

    然后在文件夹中创建rails应用程序,在此过程中跳过git以避免git冲突并指定postgresql作为我的数据库:

    rails new . --database=postgresql --skip-git
    

    注意:现有项目没有.gitignore 文件,所以由于我的rails new 命令跳过了git,我不得不手动创建.gitignore 文件。

    就是这样。

    我希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2020-04-12
      • 2010-10-16
      • 2011-07-26
      • 1970-01-01
      相关资源
      最近更新 更多