Rails 卡在开发模式

Rails stuck in development mode

我正在使用 Passenger 部署我的 Rails 应用程序,当我 运行 此命令准备好我的应用程序并设置为生产时,我收到了这条 yarn 消息,但没有进一步的操作运行.

bundle exec rake assets:precompile db:migrate RAILS_ENV=production

该命令的输出:

yarn install v1.3.2
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
info Lockfile not saved, no dependencies.
Done in 0.04s.

完成后 运行ning 我跳入 Rails 控制台并 运行 Rails.env 结果是开发。我已经删除并重新安装了 Yarn,但这并不走运。没有 Yarn 依赖项,所以我很困惑为什么我首先需要它。如果我在没有安装 Yarn 的情况下 运行 bundle exec 命令,我会收到此消息:

Yarn executable was not detected in the system.
Download Yarn at https://yarnpkg.com/en/docs/install

有没有人知道如何在没有安装 Yarn 的情况下绕过它或将其设置为生产模式?

我也试过运行宁:

RAILS_ENV=production rake assets:precompile

但是得到这个相当大的输入:

/var/www/isharelessons/code/vendor/bundle/ruby/2.3.0/gems/rake-12.3.0/lib/rake/file_utils.rb:10: warning: already initialized constant FileUtils::RUBY
/var/lib/gems/2.3.0/gems/rake-12.3.0/lib/rake/file_utils.rb:10: warning: previous definition of RUBY was here
/var/www/isharelessons/code/vendor/bundle/ruby/2.3.0/gems/rake-12.3.0/lib/rake/file_utils.rb:109: warning: already initialized constant FileUtils::LN_SUPPORTED
/var/lib/gems/2.3.0/gems/rake-12.3.0/lib/rake/file_utils.rb:109: warning: previous definition of LN_SUPPORTED was here
/var/www/isharelessons/code/vendor/bundle/ruby/2.3.0/gems/rake-12.3.0/lib/rake/file_utils_ext.rb:17: warning: already initialized constant Rake::FileUtilsExt::DEFAULT
/var/lib/gems/2.3.0/gems/rake-12.3.0/lib/rake/file_utils_ext.rb:17: warning: previous definition of DEFAULT was here
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
[....]

当你运行一个像

这样的命令时
bundle exec rake assets:precompile db:migrate RAILS_ENV=production

它会在执行这些命令时使用生产环境,但不会让您在超过单个 rake 命令持续时间的环境中。如果你那么 运行

$ rails c
2.4.2 :001 > Rails.env
 => "development"

显示的是development,因为RAILS_ENV是空的,空的时候默认是开发环境

当您在 rake 命令末尾的命令行中指定环境时,它不会更改 shell 的环境;它只是 rake 命令的一个参数,不会以任何方式持续存在。

类似地,当您在命令前加上环境前缀时,例如

RAILS_ENV=production rake assets:precompile

它不会持续超出该单个命令。这是一个临时变量赋值。这确实改变了 shell 变量,但仅在该命令行的持续时间内,并且它也不会改变未来命令的环境。

如果你想为你的 shell 会话设置环境,以便它影响所有未来的命令(直到你注销或开始一个新的 shell),那么你必须导出变量:

$ export RAILS_ENV=production
$ rails c
2.4.2 :001 > Rails.env
 => "production"