"rails s" 不起作用,但 "bundle exec rails s" 起作用。为什么?

"rails s" doesn't work but "bundle exec rails s" works. Why?

我从 Github 复制了应用程序。使用 rbenv 安装了正确版本的 Ruby。我通过 gem install bundler 和 运行 bundle install --path vendor/bundle 安装了 bundler。所有 gem 都安装在应用程序的 vendor/bundle 目录中。现在我想知道,为什么 rails s 命令不起作用但 bundle exec rails s 起作用?与 rspec 命令相同。这是因为我在 vendor/bundle 目录中安装了 gems 吗?我很困惑。

此外,当我 运行 gem list 我只得到了一些宝石,但 vendor/bundle 目录中有很多宝石。

请告诉我为什么 gem list 命令看不到 vendor/bundle 目录中的 gems 以及为什么我需要 运行 命令和 bundle exec。谢谢!

使用 bundle exec 命令的目的是 look/search 您想要在当前包中 运行 或在供应商目录中安装 gem 的命令。

如果您 运行ning 较新 rails (v5) 然后查看 binstubs,它复制了 bin 目录中可执行的命令。这样你就可以简单地调用

bin/rails 服务器

这与我们目前拥有的部署解决方案遵循的方法相同。他们创建了一个 .bundle 目录,这样就无需每次都进行捆绑安装。