Como consertar o problema Rake :: DSL constante não inicializado no Heroku?


101

Estou recebendo erros semelhantes aos que em estas perguntas , a não ser o meu estão ocorrendo em Heroku :

2011-05-30T09:03:29+00:00 heroku[worker.1]: Starting process with command: `rake jobs:work`
2011-05-30T09:03:30+00:00 app[worker.1]: (in /app)
2011-05-30T09:03:30+00:00 heroku[worker.1]: State changed from starting to up
2011-05-30T09:03:33+00:00 app[worker.1]: rake aborted!
2011-05-30T09:03:33+00:00 app[worker.1]: uninitialized constant Rake::DSL
2011-05-30T09:03:33+00:00 app[worker.1]: /app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'

A resposta nessas perguntas parece ser especificar gem 'rake', '0.8.7' porque a versão 0.9 causa o problema.

Quando tento adicionar gem 'rake', '0.8.7'ao meu gemfile e enviar para o Heroku, recebo este erro:

Unresolved dependencies detected; Installing...
You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

You have added to the Gemfile:
* rake (= 0.8.7)
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
error: hooks/pre-receive exited with error code 1
To git@heroku.com:my_app.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:my_app.git'

Meu gemfile normalmente funciona bem no Heroku. O que devo fazer?


Você tentou a resposta nº 3 que postou? O que aconteceu depois de fazer essas alterações?
— Zabba

Respostas:


205

Coloque isso em seu Rakefile acima, require 'rake':

require 'rake/dsl_definition'

3
Obrigado. Isso resolveu meus problemas e eu não sabia o que estava acontecendo. (Usando o instalador do Rails no Windows e implantando no Heroku, como um completo iniciante.)
— Jack V.

1
esta solução funciona no Windows porque ainda estou recebendo o mesmo erro - constante não inicializada Rake :: DSL
— David

2
Recebi o erro de implantação no Heroku, que hoje puxou o rake 0.9.2. Como o problema original era com 0.9.0, talvez a versão do rake não seja mais o problema. Adicionar a requirelinha ao rakefile (e recommitir e empurrar novamente para o github e Heroku) resolveu. @David, estou usando o Windows com a estrutura RoR do RailInstaller 1.2.0.
— Mark Berry

Bem, você precisará atualizar para o rake 0.9.2 para que isso funcione. Boa sorte!
— RubyFanatic de

Recebo este erro ao fazer rake db: create, "nenhum arquivo para carregar - rake / dsl_definition"
— KMC de

8

Sempre que você alterar o Gemfile, será necessário bundle installatualizar o lockfile (Gemfile.lock). O erro que você está obtendo no push não é específico para alterar a versão do rake.

bundle install
git commit -a -m "update lockfile"
git push heroku master

Observe a mensagem de erro que você recebeu:

Você modificou seu Gemfile em desenvolvimento, mas não verificou o instantâneo resultante (Gemfile.lock) no controle de versão


1
Você pode precisar executar "bundle update rake" para regenerar Gemfile.lock.
— Jan Hettich

6

Resolvi isso, finalmente, depois de muita bagunça. A versão resumida do que eu fiz, perdendo muitos experimentos, foi esta:

1) mude o Gemfile para especificar Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Retire um hack que eu tinha adicionado anteriormente ao Rakefile com base na questão do Stack Overflow Ruby on Rails e problemas com Rake: constante não inicializada Rake :: DSL :

Então, meu Rakefile voltou a ser o Rakefile padrão para meu aplicativo:

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'rake'

MyApp::Application.load_tasks

3) Altere o Heroku para executar meu aplicativo em Ruby 1.9.2:

heroku stack:migrate bamboo-mri-1.9.2 --app myapp
git push heroku master

E parece bom agora - a tarefa cron agendada está em execução de qualquer maneira.

EDIT: Ele fez correr bem, uma vez que, em seguida, explodiu novamente na próxima vez eu empurrei alguma coisa! Arrgh. Acho que consertei agora, com a adição da delayed_jobgema, com base na conversa Não sei como construir tarefas de trabalho: trabalho .

A instalação delayed_jobnão parece uma ótima solução, mas funcionou, e eu posso querer usá-la em algum momento, eu acho, especialmente com o cron job de uma vez por hora do Heroku (que simplesmente não é frequente o suficiente - há coisas que eu ' provavelmente vai querer ser executado a cada cinco minutos). Depois que instalei a delayed_jobgema, tive que fazer a configuração dela, caso contrário, o Heroku reclama da falta da delayed_jobsmesa:

#add to gemfile
gem 'delayed_job'

#at command line
bundle install
rails g delayed_job
rake db:migrate
git add -A
git commit -a -m "added delayed_job gem"
git push
heroku rake db:migrate --app myapp
heroku restart --app myapp

1

Eu tinha um aplicativo Rails 3.0.11, que especificava rake versão 0.8.7 no Gemfile para contornar o problema da versão 0.9.2 Rake :: DSL.

Depois de converter o aplicativo para Rails 3.2.0 (pilha Heroku Cedar), estava tendo um problema com o trabalhador (uma tarefa de rake) travando. Mudei "gem 'rake', '0.8.7'" para "gem 'rake'", que incluiu o rake versão 0.9.2.2. O trabalhador parou de travar com a nova versão.


0

Seu problema é causado por não excluir o Gemfile.lockarquivo e não é específico do Heroku. A exclusão Gemfile.lockdeve resolver o problema, mas o levará direto para outro:

To git@heroku.com:tailored-landing-pages.git
 * [new branch]      master -> master
manfred@painstation2:~/Desktop/projects/ror/ta/tlp307$ heroku rake db:migrate
rake aborted!
ninitialized constant Rake::DSL
/app/Rakefile:13:in `<class:Application>'
/app/Rakefile:12:in `<module:Tlp307>'
/app/Rakefile:11:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

Infelizmente, ainda não encontrei a solução para esse problema, já que diminuir o Rake para 0.8.7 não parece funcionar aqui. Se outra pessoa tiver uma resposta, eu agradeceria muito.


4
Eu nunca recomendaria deletar seu lockfile.
— wuputah

2
Excluir o Gemfile.lock resultará na instalação de todas as versões mais recentes de todas as gemas em cada implantação no heroku (a menos que você fixe todas as versões no Gemfile).
— Kliment Mamykin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.