【问题标题】:Rails stuck in development modeRails 卡在开发模式
【发布时间】:2018-01-19 17:36:23
【问题描述】:

我正在使用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 依赖项,所以我很困惑为什么我首先需要它。如果我在没有安装 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
[....]

【问题讨论】:

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


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2018-01-22
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多