【发布时间】: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