【问题标题】:Deploying Rails Applications with Unicorn to Heroku使用 Unicorn 将 Rails 应用程序部署到 Heroku
【发布时间】:2014-05-02 18:33:47
【问题描述】:

我正在尝试使用 Unicorn 将我的 Ruby on Rails 应用程序部署到 Heroku。我关注了tutorial on Heroku 网站。但它显示:

预编译资产失败。

运行结果如下:

-----> Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   fatal: Not a git repository (or any of the parent directories): .git
   fatal: Not a git repository (or any of the parent directories): .git
   [deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
   rake aborted!
   uninitialized constant Rack::Timeout
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/config/initializers/timeout.rb:1:in `<top (required)>'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/engine.rb:649:in `block in load_config_initializer'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/activesupport-4.1.0.rc1/lib/active_support/notifications.rb:161:in `instrument'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/engine.rb:648:in `load_config_initializer'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/engine.rb:613:in `block (2 levels) in <class:Engine>'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/engine.rb:612:in `each'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/engine.rb:612:in `block in <class:Engine>'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:30:in `instance_exec'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:30:in `run'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:55:in `block in run_initializers'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:44:in `each'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:44:in `tsort_each_child'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/initializable.rb:54:in `run_initializers'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/application.rb:286:in `initialize!'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/config/environment.rb:5:in `<top (required)>'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/application.rb:262:in `require_environment!'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/railties-4.1.0.rc1/lib/rails/application.rb:346:in `block in run_tasks_blocks'
   /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/vendor/bundle/ruby/2.0.0/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:54:in `block (2 levels) in define'
   Tasks: TOP => environment
   (See full trace by running task with --trace)

   Precompiling assets failed.


   Push rejected, failed to compile Ruby app

我使用 Ruby2.0,Ruby on Rails 4.1.0.rc1。

【问题讨论】:

    标签: ruby ruby-on-rails-4 unicorn


    【解决方案1】:

    看起来您的问题实际上与 Rack::Timeout 有关,而不是资产编译。

    uninitialized constant Rack::Timeout
    /tmp/build_d3989303-c1d8-4020-9b98-eb9e1834f0d0/config/initializers/timeout.rb:1:in `<top (required)>'
    

    您是否在 gemfile 中包含了 rack-timeout gem?然后跑bundle install

    gem "rack-timeout"  
    

    【讨论】:

      【解决方案2】:

      移除超时设置:

      rm config/initializers/timeout.rb
      

      Heroku 在 30 秒后超时所有请求,但进程将继续在后台运行。

      如果您想避免这种情况,请重新添加上面的行,但 put rack-timeout in your Gemfile

      【讨论】:

        【解决方案3】:

        我建议尝试以下方法:

        heroku labs:enable user-env-compile 
        

        如果这失败了,您总是可以预编译您的生产资产,将它们添加到您的代码库中,然后自己将它们推送到 heroku。

        RAILS_ENV=production rake assets:precompile
        git add .
        git commit -m 'serving up my precompiled assets'
        git push origin master
        git push origin heroku
        

        【讨论】:

          猜你喜欢
          • 2015-12-25
          • 2014-09-18
          • 1970-01-01
          • 2018-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-07
          • 2018-08-05
          相关资源
          最近更新 更多