ruby-on-rails - 如何在 Rails 5 环境中创建 Rails 6 应用程序
问题描述
我正在使用构建一堆模板代码的微服务自动化管道。
目前,管道代码通过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
解决方案
我真的不明白您为什么要在 ruby 中执行此操作,似乎您正在尝试重新发明诸如 docker 或 kubernetes 已经很好地解决的问题。
但我怀疑你的脚本的问题是 bash 会话没有你想要的 rbenv 存根。我会在您的计算机或服务器的文件系统上找到它们的位置,然后在运行诸如gem
、rails
或bundler
.
推荐阅读
- bash - 将用于替换文件中字符串的 BASH sed 命令转换为 Powershell 命令
- tensorflow - 在keras / Tensorflow中标记多类?
- excel - 在 Excel 中进行二进制和/或十六进制计算
- hyperledger-fabric - 在 Hyperledger Fabric 中创建私有数据的问题
- angular - 在同一个 UMD 中打包外部依赖项
- java - 需要帮助自动化多因素身份验证测试?
- angular - Angular 6 动态表单渲染
- javascript - 使用网格布局 - HTML 水平均匀定位框
- asp.net-mvc-5 - 使用 grid.Mvc6 创建 gridview 时显示错误
- php - 在 WooCommerce 产品类别中包含静态页面