12

我正在尝试运行从 Github 上取下的应用程序。

我已经运行bundle installGemfile. 但是,在运行应用程序时,一条错误消息告诉我安装的 gem 版本错误。

在检查时,Gemfile.lock我注意到版本比安装的 gem 旧。(即我安装了较新版本的 gems 并且应用程序需要较旧的 gems。)

有没有按照 Gemfile.lock 文件中描述的版本快速安装所有 gem 的方法?或者有没有一种方法可以忽略该文件?

宝石文件:

   source 'http://rubygems.org'
   gem 'rails', "3.0.9"
   gem "sass"
   ..

Gemfile.lock:

 sass (3.1.1)
 ..

在上面的示例中,即使安装了 sass,应用程序也特别需要 3.1.1 版本。

4

3 回答 3

11

有了一个有效的Gemfile.lock文件,bundle install单独使用就足够了,除非某些特定的 gem 版本已经被删除。在这种情况下,您需要寻找当前仍然可用的替代 gem 版本(通常bundle update name_of_yanked_gem就足够了)。

关于sass 3.1.1,与其说应用程序需要那个特定版本,不如说,Gemfile.lock考虑到Gemfile. 正如您所列出的,没有为自己指定版本范围,但是如果其他 gem作为依赖sass项,它们可能会施加进一步的限制。sass

完全忽略Gemfile.lock不是一个好主意,因为在正常情况下,它将指定最后一次知道仍可用于应用程序的 gem 版本。

于 2012-08-31T13:32:51.937 回答
9

尝试这个 ..

bundle install --deployment

使用上述部署选项,bundle 然后从 Gemfile.lock 读取。

更重要的是,gems 被安装到目录 vendor/bundle,而 bundle 目录是自动创建的。

另外,.bundle直接在rails根目录下新建一个目录,里面有一个名为config的文件,其内容如下...

BUNDLE_FROZEN: '1'
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'

希望以上内容对您有用。

于 2016-03-19T11:37:09.280 回答
7

确保您正在运行 Web 服务器bundle execute rails server

于 2012-08-31T13:12:03.337 回答