Ruby on Rails的Rake麻烦

时间:2022-10-26 23:17:29

I'm very new to Rails, so please forgive my lack of understanding. I've installed the latest versions of RubyGems, Ruby, Rails, Rake, and MySQL etc via RubyGems, but I have this problem when starting to make a basic Rails app:

我对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

I have no idea what I did wrong, and I'm so new to this that I don't know that I could debug it if I spent my whole life working on it -- any ideas / guidance?

我不知道我做错了什么,我对这个问题太陌生了,我不知道如果我花了一辈子的时间来研究它,我能不能调试它——有什么想法和指导吗?

All help is appreciated and thanks in advance!

感谢您的帮助,谢谢!

3 个解决方案

#1


2  

I would recommend starting with Rails 2.3.8 if this is your first experience. There are many tutorials and wider support; 3.0 is fairly fresh with several major changes. You'll be able to upgrade from 2.3.8 to 3.0.0 eventually anyway.

如果这是您的第一次体验,我建议您从Rails 2.3.8开始。有许多教程和更广泛的支持;3.0有几个主要的变化,非常新颖。最终,您将能够从2.3.8升级到3.0.0。

#2


2  

Bundler is the new dependencies management system for Ruby apps, and is used in new Rails projects.

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

#3


0  

I had the same error:

我犯了同样的错误:

rake aborted!
uninitialized constant Bundler

It turns out it was happening because the environment running the cron task is not set up like your env is inside a shell. The .profile and .bash_profile are not run before cron tasks. I fixed this by setting the PATH variable in crontab to what it is for the deploy user:

这是因为运行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

You can check if this is what's causing your issue by running

您可以检查这是否是导致您的问题的原因。

which ruby

from inside the shell and from inside a cron task. If you get different results it tells you the cron task is not running the same ruby as you do in the shell and that the ruby the cron task is running does not have the Bundler gem installed.

从shell内部和cron任务内部。如果您得到不同的结果,它会告诉您cron任务不是运行与您在shell中所做的相同的ruby,而且cron任务运行的ruby没有安装Bundler gem。

#1


2  

I would recommend starting with Rails 2.3.8 if this is your first experience. There are many tutorials and wider support; 3.0 is fairly fresh with several major changes. You'll be able to upgrade from 2.3.8 to 3.0.0 eventually anyway.

如果这是您的第一次体验,我建议您从Rails 2.3.8开始。有许多教程和更广泛的支持;3.0有几个主要的变化,非常新颖。最终,您将能够从2.3.8升级到3.0.0。

#2


2  

Bundler is the new dependencies management system for Ruby apps, and is used in new Rails projects.

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

#3


0  

I had the same error:

我犯了同样的错误:

rake aborted!
uninitialized constant Bundler

It turns out it was happening because the environment running the cron task is not set up like your env is inside a shell. The .profile and .bash_profile are not run before cron tasks. I fixed this by setting the PATH variable in crontab to what it is for the deploy user:

这是因为运行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

You can check if this is what's causing your issue by running

您可以检查这是否是导致您的问题的原因。

which ruby

from inside the shell and from inside a cron task. If you get different results it tells you the cron task is not running the same ruby as you do in the shell and that the ruby the cron task is running does not have the Bundler gem installed.

从shell内部和cron任务内部。如果您得到不同的结果,它会告诉您cron任务不是运行与您在shell中所做的相同的ruby,而且cron任务运行的ruby没有安装Bundler gem。