Ruby on rails。当我添加unicorn gem时,Heroku编译资产超时

时间:2014-11-24 17:13:09

标签: ruby-on-rails heroku unicorn

-----> Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   !     Timed out compiling Ruby app (15 minutes)
   !     See https://devcenter.heroku.com/articles/slug-compiler#time-limit

当我从gemfile资产中删除unicorn gem时:预编译开始工作......我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于这对我来说似乎是个问题,我会给你一些我一直在看的指南。

我解决这个问题的方法是谷歌错误。当我输入heroku独角兽设置时,我得到了这个页面:https://devcenter.heroku.com/articles/rails-unicorn

更新:我遇到的错误是资产编译问题。通过在我的网页上使用inspect元素引起了我的注意。所以我再次阅读了一些指南,以确保资产预先编译(因为我已经有两个链接,所以只能提供名称):

  1. 使用Unicorn部署Rails应用程序
  2. Heroku上的Rails 4.x入门
  3. Heroku 上的SQLite(我必须从SQLite更新我的应用程序)
  4. Heroku上的Rails 4资产管道
  5. 否则,这是我一直关注的指南:

    下面是将您的应用程序放到heroku上的一些说明......

    Heroku特定说明:

    NOTE: everything from below this point will be for getting your app ready for deployment onto Heroku.   
    

    要启用静态资产服务和Heroku登录等功能,请将rails_12factor gem添加到Gemfile的末尾。

    gem 'rails_12factor', group: :production
    

    指定特定的Ruby。在gemfile的末尾添加...

    ruby "2.1.2"
    

    将Unicorn Webserver添加到您的Gemfile:

    在宝石文件中

    gem 'unicorn'
    

    然后运行

    $ bundle install
    

    现在您已准备好将应用配置为使用Unicorn。

    在config / unicorn.rb上为Unicorn创建配置文件:

    $ touch config/unicorn.rb
    

    添加Unicorn特定配置选项在文件config / unicorn.rb中:

    worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
    timeout 15
    preload_app true
    
    before_fork do |server, worker|
      Signal.trap 'TERM' do
        puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
        Process.kill 'QUIT', Process.pid
      end
    
      defined?(ActiveRecord::Base) and
        ActiveRecord::Base.connection.disconnect!
    end
    
    after_fork do |server, worker|
      Signal.trap 'TERM' do
        puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
      end
    
      defined?(ActiveRecord::Base) and
        ActiveRecord::Base.establish_connection
    end
    

    此默认配置假定使用Active Record的标准Rails应用程序。您应该熟悉the official Unicorn documentation中的不同选项。

    最后,您需要告诉Heroku如何通过在应用程序目录的根目录中创建一个Procfile来运行您的Rails应用程序。

    添加Procfile:

    touch Procfile
    (note: the case is important!)
    
    Procfile中的

    写道:

    web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
    

    将RACK_ENV设置为您环境中的开发和要连接的PORT。在推送到Heroku之前,您需要测试RACK_ENV设置为生产,因为这是您的Heroku应用程序将运行的环境。

    $ echo "RACK_ENV=development" >> .env
    $ echo "PORT=3000" >> .env
    

    您还需要将.env添加到.gitignore中,因为这是针对本地环境设置的。

    $ echo ".env" >> .gitignore
    $ git add .gitignore
    $ git commit -m "add .env to .gitignore"
    

    使用Foreman在本地测试您的Procfile:

    $ gem install foreman
    

    您现在可以通过运行

    启动Web服务器
    $ foreman start
    18:24:56 web.1  | I, [2013-03-13T18:24:56.885046 #18793]  INFO -- : listening on addr=0.0.0.0:5000 fd=7
    18:24:56 web.1  | I, [2013-03-13T18:24:56.885140 #18793]  INFO -- : worker=0 spawning...
    18:24:56 web.1  | I, [2013-03-13T18:24:56.885680 #18793]  INFO -- : master process ready
    18:24:56 web.1  | I, [2013-03-13T18:24:56.886145 #18795]  INFO -- : worker=0 spawned pid=18795
    18:24:56 web.1  | I, [2013-03-13T18:24:56.886272 #18795]  INFO -- : Refreshing Gem list
    18:24:57 web.1  | I, [2013-03-13T18:24:57.647574 #18795]  INFO -- : worker=0 ready
    

    按Ctrl-C退出,您可以将更改部署到Heroku:

    $ git add .
    $ git commit -m "use unicorn via procfile"
    $ git push heroku master
    

    检查ps,您将看到Web进程使用新命令将Unicorn指定为Web服务器

    $ heroku ps
    === web (1X): `bundle exec unicorn -p $PORT -c ./config/unicorn.rb`
    web.1: starting 2014/04/17 12:55:33 (~ 1s ago)
    

    此时您可以按照正常程序在heroku上获取您的应用

    git init git add -A git commit -m "initial commit"

    在github上设置内容....然后

    heroku create git push heroku master

    在Heroku上迁移数据库

    heroku run rake db:migrate
    

    确保将应用设置为运行

    heroku ps:scale web=1
    

    打开应用

    heroku open