【问题标题】:How to Create Rails 6 application from within a Rails 5 environment如何在 Rails 5 环境中创建 Rails 6 应用程序
【发布时间】:2019-09-14 02:59:11
【问题描述】:

我正在使用构建一堆模板代码的微服务自动化管道。

目前,管道代码通过guard自动运行并生成一个shell脚本来创建数据库、创建新的rails应用程序和其他类型的资产。

我在 RbEnv 中运行 ruby​​ & rails 并且我正在执行的脚本在命令行中运行良好,它创建了一个全新的 Rails 6 应用程序。

但是,当我从具有现有 Rails 5.2 环境应用程序的守卫运行它时,新应用程序被构建为 Rails 5.2 应用程序。

我已尝试覆盖某些设置,但它仍会选择运行我的代码的环境。

当我从命令行运行脚本时:

echo 'SHOULD CREATE A RAILS APP using VERSION 6.0.0 on RUBY 2.6.3'

gem install rails -v 6.0.0

echo 'rails -v'
rails -v

echo 'rbenv local'
rbenv local

echo 'rbenv version'
rbenv version

echo 'rbenv versions'
rbenv versions

rails _6.0.0_ new . -d postgresql --force --skip-action-mailer --skip-action-mailbox --skip-action-text --skip-spring --skip-test --skip-bundle --skip-webpack-install

我得到以下输出日志

Successfully installed rails-6.0.0
1 gem installed
SHOULD CREATE A RAILS APP using VERSION 6.0.0 on RUBY 2.6.3
rails -v
Rails 6.0.0
rbenv local
2.6.3
rbenv version
2.6.3 (set by /Users/myname/dev/myapp/.ruby-version)
rbenv versions
  system
  2.4.1
  2.4.6
  2.5.3
* 2.6.3 (set by /Users/myname/dev/myapp/.ruby-version)

带有以下 GEM 文件

ruby '2.6.3'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.0.0'
# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
# Use Puma as the app server

并通过最后一行确认应用程序是 Rails 6

remove  config/initializers/new_framework_defaults_6_0.rb

当我使用系统和 fork { exec { } } 的变体从 ruby​​ 运行相同的脚本时

    Dir.chdir File.dirname(output_file) do
      # fork { exec("bash #{output_file}") }
      system "bash #{output_file}"
      # system "/usr/local/bin/zsh #{output_file}"
    end

我得到 Rails 5.2

rails -v
Rails 5.2.3
rbenv local
rbenv: no local version configured for this directory
rbenv version
2.5.3 (set by RBENV_VERSION environment variable)
rbenv versions
  system
  2.4.1
  2.4.6
* 2.5.3 (set by RBENV_VERSION environment variable)
  2.6.3

【问题讨论】:

  • 有什么理由不使用模板而不是运行rails new
  • 我确实计划在这个过程中使用模板,但仍然需要带有 -m path/template.rb 的新 Rails。我知道它可能会选择正确的代码,但我很好奇为什么我不能在我想要的环境中生成一个进程

标签: ruby-on-rails ruby shell ruby-on-rails-6


【解决方案1】:

我真的不明白您为什么要在 ruby​​ 中执行此操作,看起来您正在尝试重新发明类似 docker 或 kubernetes 已经很好解决的问题。

但我怀疑您的脚本的问题是 bash 会话没有您想要的 rbenv 存根。我会找到它们在您的计算机或服务器文件系统上的位置,然后在运行 gemrailsbundler 等命令时指定它们的确切路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2011-03-03
    • 2018-06-19
    • 2019-12-29
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多