Развертывание публикации в блоге Heroku приводит к ошибке приложения

Я пытаюсь развернуть новую версию блога Publify в Heroku. Все отлично работает на моем локальном компьютере.

А также git push heroku master ничего не говорит о проблемах:

Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 786 bytes, done.
Total 6 (delta 1), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.2.2
       Running: bundle install --without development:test --path 
         vendor/bundle --binstubs bin/ --deployment

       Using rake (10.0.2)

       ... (edited out list of gems being used)

       Your bundle is complete! It was installed into ./vendor/bundle
       Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
-----> Rails plugin injection
       Injecting rails_log_stdout
       Injecting rails3_serve_static_assets
-----> Discovering process types
       Procfile declares types      -> (none)
       Default types for Ruby/Rails -> console, rake, web, worker
-----> Compiled slug size: 10.7MB
-----> Launching... done, v7
       http://desolate-harbor-2909.herokuapp.com deployed to Heroku

To git@heroku.com:desolate-harbor-2909.git
   cea2c5c..efb4eb2  master -> master

Но после этого я вижу это на странице приложений:

Ошибка приложения
В приложении произошла ошибка, и ваша страница не может быть обработана. Пожалуйста, попробуйте снова через пару минут.

Если вы являетесь владельцем приложения, проверьте подробности в своих журналах.

и журналы Heroku, показывающие это:

heroku[slugc]: Slug compilation started
heroku[api]: Release v7 created by runsfor@gmail.com
heroku[api]: Deploy efb4eb2 by runsfor@gmail.com
heroku[web.1]: State changed from crashed to starting
heroku[slugc]: Slug compilation finished
heroku[web.1]: Starting process with command `bundle exec rails server -p 50812`
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:7:in `evaluate'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/bin/bundle:14:in `<top (required)>'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:32:in `instance_eval'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/friendly_errors.rb:4:in `with_friendly_errors'
app[web.1]: There was an error in your Gemfile, and Bundler cannot continue.
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/cli.rb:423:in `exec'
app[web.1]:        /app/Gemfile:7:in `eval_gemfile'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:32:in `eval_gemfile'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/definition.rb:18:in `build'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler.rb:144:in `definition'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/task.rb:27:in `run'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/invocation.rb:120:in `invoke_task'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor.rb:275:in `dispatch'
app[web.1]:        /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/bin/bundle:23:in `load'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/base.rb:408:in `start'
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/bin/bundle:14:in `block in <top (required)>'
app[web.1]: /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load': syntax error on line 27, col 0: `adapter = uri.scheme' (ArgumentError)
app[web.1]:        /app/vendor/bundle/ruby/1.9.1/bin/bundle:23:in `<main>'
heroku[web.1]: Process exited with status 4
heroku[web.1]: State changed from starting to crashed
heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=desolate-harbor-2909.herokuapp.com fwd=171.5.16.142 dyno= queue= wait= connect= service= status=503 bytes=
heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/favicon.ico host=desolate-harbor-[2909.herokuapp.com][1] fwd=171.5.16.142 dyno= queue= wait= connect= service= status=503 bytes=

Что я делаю не так? Я думаю, что мне нужно как-то настроить его перед развертыванием в Heroku.

Файл Database.yml:

login: &login
  adapter: postgresql
  host: localhost
  username: *****
  password: *****

development:
  database: typo_dev
  <<: *login

test:
  database: typo_tests
  <<: *login

production:
  database: typo
  <<: *login

Heroku запустить грабли DB: мигрировать вывод:

Running `rake db:migrate` attached to terminal... up, run.7604
/usr/local/lib/ruby/1.9.1/syck.rb:135:in `load': syntax error on line 27, col 0: `adapter = uri.scheme' (ArgumentError)
       /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'
       /app/Gemfile:7:in `eval_gemfile'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:32:in `instance_eval'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:32:in `eval_gemfile'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/dsl.rb:7:in `evaluate'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/definition.rb:18:in `build'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler.rb:144:in `definition'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/cli.rb:423:in `exec'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/task.rb:27:in `run'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/invocation.rb:120:in `invoke_task'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor.rb:275:in `dispatch'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/vendor/thor/base.rb:408:in `start'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/bin/bundle:14:in `block in <top (required)>'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/lib/bundler/friendly_errors.rb:4:in `with_friendly_errors'
       /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.2.2/bin/bundle:14:in `<top (required)>'
       /app/vendor/bundle/ruby/1.9.1/bin/bundle:23:in `load'
       /app/vendor/bundle/ruby/1.9.1/bin/bundle:23:in `<main>'
There was an error in your Gemfile, and Bundler cannot continue.

1 ответ

Когда Rails загружает database.yml file это фактически фильтрует это через ERB прежде, чем загрузить это как файл Yaml. Это сделано для того, чтобы вы могли динамически создавать свою конфигурацию, используя Ruby, например, чтобы хранить пароли в вашем хранилище.

Когда вы добавляете приложение Rails в Heroku, новый database.yml файл создан, заменяя оригинал. Это новый database.yml использует ERB для создания конфигурации из DATABASE_URL переменная окружения, так что на самом деле это не "чистый" файл Yaml - вы можете считать его чем-то вроде database.yml.erb,

Gemfile Typo загружает database.yml файл, а затем анализирует его как Yaml, но сначала не передает его через ERB. Ошибки, которые вы видите, вызваны тем, что синтаксический анализатор Yaml читает файл, но не работает, так как это ERB, а не допустимый Yaml.

Чтобы это исправить, нужно убедиться, что database.yml файл передается через ERB перед тем, как его читают как Yaml. В вашем Gemfile изменить линию

conf = YAML.load(File.read(dbfile))

в

require 'erb'
conf = YAML.load(ERB.new(File.read(dbfile)).result)

Возможно, вы захотите открыть сообщение об ошибке для Typo, или даже отправить запрос на удаление.

Другие вопросы по тегам