【问题标题】:Trouble with Ruby on Rails with Rake使用 Rake 处理 Ruby on Rails 的问题
【发布时间】:2011-04-08 23:15:05
【问题描述】:

我对 Rails 很陌生,所以请原谅我的理解不足。我已经通过 RubyGems 安装了最新版本的 RubyGems、Ruby、Rails、Rake 和 MySQL 等,但是在开始制作基本的 Rails 应用程序时遇到了这个问题:

Icarus:temporary atg$ rails new people
    ... (output omitted) ...
Icarus:temporary atg$ cd people
Icarus:people atg$ rake db:create
(in /Users/atg/temporary/people)
rake aborted!
uninitialized constant Bundler
/Users/atg/temporary/people/Rakefile:4
(See full trace by running task with --trace)
Icarus:people atg$ rake db:create --trace
(in /Users/atg/temporary/people)
rake aborted!
uninitialized constant Bundler
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
/Users/atg/temporary/people/config/boot.rb:9
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Users/atg/temporary/people/config/application.rb:1
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Users/atg/temporary/people/Rakefile:4
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2383:in `load'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2383:in `raw_load_rakefile'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2017:in `load_rakefile'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2016:in `load_rakefile'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2000:in `run'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/Users/atg/.gem/ruby/1.8/gems/rake-0.8.7/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19

我不知道我做错了什么,而且我对这个很陌生,以至于我不知道如果我一生都在努力,我可以调试它——有什么想法/指导吗?

感谢所有帮助,并提前致谢!

【问题讨论】:

    标签: mysql ruby-on-rails ruby rake


    【解决方案1】:

    如果这是您的第一次体验,我建议您从 Rails 2.3.8 开始。有很多教程和更广泛的支持; 3.0 相当新鲜,有几个重大变化。无论如何,您最终都可以从 2.3.8 升级到 3.0.0。

    【讨论】:

    • 那我该如何降级呢?
    • 看来我安装了 rails 2.3.8 和 3.0.0?当我运行gem list 时,我得到rails (3.0.0, 2.3.8) 作为其中一条线。这是否意味着我可以选择我想要激活的 Rails 版本?
    【解决方案2】:

    Bundler 是 Ruby 应用程序的新依赖管理系统,用于新的 Rails 项目。

    # ask rubygems to install bundler
    $ gem install bundler
    
    # ask bundler to install your app's dependencies
    $ bundle install
    
    # run your app & tasks using bundler
    $ bundle exec rake db:create
    

    【讨论】:

    • 也粘贴Gemfile的内容。
    • 现在看来应该可以了。可能是 Bundler 问题 (github.com/carlhuda/bundler/issues)。由于这些是后来的 Rails 3 和 Bundler 版本,现在您已经安装了 Bundler 并捆绑安装了应用程序的依赖项,看看在没有 bundle exec 前缀的情况下仅使用 rake db:create 是否有任何不同。
    • 不,我得到了与rake db:create完全相同的东西
    【解决方案3】:

    我有同样的错误:

    rake aborted!
    uninitialized constant Bundler
    

    事实证明它正在发生,因为运行 cron 任务的环境没有像你的 env 在 shell 中那样设置。 .profile 和 .bash_profile 不会在 cron 任务之前运行。我通过将 crontab 中的 PATH 变量设置为部署用户的值来解决此问题:

    PATH=/opt/nginx/sbin:/usr/local/mysql/bin:/opt/local/bin:/opt/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/Applications/sshfs/bin
    

    您可以通过运行检查这是否是导致您的问题的原因

    which ruby
    

    来自 shell 内部和 cron 任务内部。如果您得到不同的结果,它会告诉您 cron 任务运行的 ruby​​ 与您在 shell 中运行的 ruby​​ 不同,并且 cron 任务正在运行的 ruby​​ 没有安装 Bundler gem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多