Rails陷入开发模式

时间:2018-01-19 17:36:24

标签: ruby-on-rails ruby-on-rails-5 passenger yarnpkg

我正在使用Passenger部署我的Rails应用程序,当我运行此命令以使我的应用程序准备就绪并设置为生产时,我收到此纱线消息但没有进一步的操作。

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.

完成此操作后,我跳进Rails控制台并运行Rails.env,结果就是开发。我已经删除并重新安装了纱线,但这不是运气。没有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
[....]

1 个答案:

答案 0 :(得分:1)

运行

之类的命令时
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"