【问题标题】:why rails force me to use bundle exec?为什么rails强迫我使用bundle exec?
【发布时间】:2012-05-02 09:54:34
【问题描述】:

我想使用“rake routes”运行我的 rake 命令

但是rails会产生以下错误

** Invoke routes (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
uninitialized constant ActiveAdmin
/Users/aaalsubaie/Sites/Posnegs/config/initializers/active_admin.rb:1
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/engine.rb:588
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/engine.rb:587:in `each'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/engine.rb:587
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `run_initializers'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `send'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
/Users/aaalsubaie/Sites/Posnegs/config/environment.rb:5
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `require'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/application.rb:103:in `require_environment!'
/Library/Ruby/Gems/1.8/gems/railties-3.2.3/lib/rails/application.rb:292:in `initialize_tasks'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:176:in `invoke_prerequisites'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `invoke_prerequisites'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:157:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/bin/rake:33
/usr/bin/rake:23:in `load'
/usr/bin/rake:23
Tasks: TOP => routes => environment

奇怪的是当我运行“bundle exec rake routes”
它工作正常!我在开发/生产环境中遇到此错误

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    对特定版本的 gem 的依赖造成了先有鸡还是先有蛋的情况,即在应用发现它需要不同版本之前,可能会加载错误版本的 gem。 bundle exec 有助于从右脚下车。见http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

    【讨论】:

    • 是否有执行一次并解决所有依赖项的选项?那么我不再需要使用 bundle exec 了。
    • 那篇文章解释了其中的一些。使用 binstubs 并更改路径以首先检查它们。或者使用 oh-my-zsh 作为 shell,因为它可以自动帮助你。或者,如果您使用 rvm,请将 binstubs 添加到您的 .rvmrc 文件中。我只是将'be'别名为'bundle exec'并将事情作为'be rake'运行。唯一的其他选择是删除未在 Gemfile.lock 中列出的所有冲突宝石
    • 谢谢,我不介意在可执行文件前面写 bundle exec。问题是当我使用 Cap deploy 进行部署时:cold 不使用它,这会从我的网站dev.ajhezaty.com 生成类似这样的错误
    • 根据gembundler.com/deploying.html,您需要将require "bundler/capistrano" 添加到您的deploy.rb
    【解决方案2】:

    如果你使用 rvm,你可以使用bundle install --binstubs,然后你就不必再做 bundle exec 了。详情请见this post

    不要忘记将 bin 目录添加到您的 gitignore 文件中。

    【讨论】:

    • 我没有使用 rvm。除了这个 my rails v = 3.2.3 和 my ruby​​ v = ruby​​ 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]之外,你还有什么选择吗?
    • 你可以在没有 rvm 的情况下使用 binstubs - bundle 的主页可能会有所帮助 - gembundler.com
    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2011-12-27
    • 2016-02-05
    相关资源
    最近更新 更多