Rake Assets:预编译错误将rails app推送到heroku

时间:2015-01-27 06:14:19

标签: ruby-on-rails git heroku

我首先要说的是我现在热情地讨厌heroku。

好的,就可以了。我正在将应用程序推送到heroku,并且预先编译资产失败了#34;错误。我已经尝试了大约100件事来修复它,但没有任何作用。我试过设置

    config.assets.initialize_on_precompile = false

在我的application.rb文件中,不起作用。我尝试过本地预编译,评论和推送,以及隐藏本地预编译资产。我也试过推进不同的环境。

这是我的错误日志,事情开始发生:

> Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   rake aborted!
   SyntaxError: (erb):82: syntax error, unexpected ':', expecting ')'
   (erb):85: unterminated string meets end of file
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config/environment.rb:40:in `load_yaml'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config.rb:83:in `load!'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid.rb:99:in `load!'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/railtie.rb:75:in `block in <class:Railtie>'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:30:in `instance_exec'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:30:in `run'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:55:in `block in run_initializers'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:54:in `run_initializers'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:300:in `initialize!'
   /tmp/build_1843337b33065f83ff572061af54f827/config/environment.rb:5:in `<top (required)>'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `block in require'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:232:in `load_dependency'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:276:in `require_environment!'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:389:in `block in run_tasks_blocks'
   /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/sprockets-rails-2.2.4/lib/sprockets/rails/task.rb:64:in `block (2 levels) in define'
   Tasks: TOP => environment

我看到&#34;语法错误&#34;靠近顶部,但我不知道要查看哪个文件。 任何人都可以帮助我吗?

这是我的mongoid.yml文件的结尾,从第78行到第90行

78    staging:
79      sessions:
80        default:
81          database: <dbname>
82          hosts: 
83           - <host>:<port>
84          username: <username> 
85          password: <password> 
86        options:
87    production:
88      sessions:
89        default:
90          uri: <%= ENV['MONGOHQ_URL'] %>

1 个答案:

答案 0 :(得分:2)

stacktrace的前几行指出了你的问题:

Running: rake assets:precompile
rake aborted!
SyntaxError: (erb):82: syntax error, unexpected ':', expecting ')'
(erb):85: unterminated string meets end of file
/tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config/environment.rb:40:in `load_yaml'

当Mongoid尝试加载其YAML配置mongoid.yml时发生错误。

发现问题

这与Heroku无关。堆栈跟踪中提到的mongoid.yml行指向staging部分,您应该能够在本地重现错误通过运行:

bundle exec rake assets:precompile RAILS_ENV=staging
顺便说一下,你还在运行Rails 3吗?因为according to Heroku

  

在Rails 4.x中,此选项[initialize_on_precompile]已被删除,不再需要。

解决方案

我的猜测是你需要引用包含冒号的字符串。它应该是:

78    staging:
79      sessions:
80        default:
81          database: <dbname>
82          hosts: 
83           - '<host>:<port>'
84          username: <username> 
85          password: <password> 
86        options:
87    production:
88      sessions:
89        default:
90          uri: <%= ENV['MONGOHQ_URL'] %>

不是- <host>:<port>(请注意上面的单引号。)