尽管有这样的答案:rails s or bundle exec rails s
以及类似的博文:http://blog.wyeworks.com/2011/12/27/bundle-exec-rails-executes-bundler-setup-3-times/
这似乎表明你应该只是运行rails s
而不是bundle exec rails s
我仍然发现偶尔我不能简单地运行rails s
。 E.g。
$ rails s
Rails is not currently installed on this system. To get the latest version, simply type:
$ sudo gem install rails
You can then rerun your "rails" command.
然后在相同的环境中立即运行它:
$ bundle exec rails s
=> Booting WEBrick
=> Rails 4.0.0.beta1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2015-01-28 12:31:48] INFO WEBrick 1.3.1
[2015-01-28 12:31:48] INFO ruby 2.0.0 (2014-11-13) [x86_64-darwin14.0.0]
[2015-01-28 12:31:48] INFO WEBrick::HTTPServer#start: pid=18959 port=3000
为什么不一样?是否应修复此行为,如果是,如何解决?
====更新
回应@awendt
$ which rails
/Users/snowcrash/.rvm/gems/ruby-2.0.0-p598/bin/rails
$ rails c
Rails is not currently installed on this system. To get the latest version, simply type:
$ sudo gem install rails
You can then rerun your "rails" command.
$ bundle exec rails c
Loading development environment (Rails 4.0.0.beta1)
2.0.0-p598 :001 >
答案 0 :(得分:1)
尝试重现这一点,我得到(在Ubuntu 12.04.5 LTS上):
me@machine:/some/path$ rails c
The program 'rails' is currently not installed. To run 'rails' please ask your administrator to install the package 'rails'
me@machine:/some/path$ which rails
me@machine:/some/path$
所以在我的情况下,rails脚本不在我的$PATH
。
您的设置不同,因为该消息明确提到了宝石。你甚至可能得到这个:
you@machine:/some/path$ which rails
/usr/bin/rails
you@machine:/some/path$
因为/usr/bin/
位于$PATH
之前的某个地方you're still invoking the rails script that ships with the OS之前。
无论如何,重要的部分是: bundle exec rails c
让Bundler找出在哪里找到Rails gem,而不是让shell搞清楚。
您可以将gem安装到完全任意的位置,只有Bundler才能找到它们,因为该位置不在$PATH
但在$BUNDLE_PATH
中(请参阅{{ 3}})。
这就是为什么rails
和bundle exec rails
不一样的原因。
这不是错误,不应修复行为。是的,您不必运行bundle exec rails
,因为在最近的版本中,rails
执行完全相同的操作。但是你看到的错误是一个不同的问题。
答案 1 :(得分:0)
对于Rails 3x
及更高版本,无论何时运行rails server
,它始终位于environment
和Gemfile
的上下文中。因此,bundler
有助于启动和加载必需的 gems /库,使用$BUNDLE_PATH
来启动应用程序,如果您不使用{{1},默认情况下不会出现该应用程序相反,它只包含使用bundle exec
的默认库/ gems(如果您使用gemset
)或默认路径加载。
..希望这会有所帮助