如何从Gemfile.lock文件安装gem?

dmu*_*muk 10 ruby-on-rails github ruby-on-rails-3

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

我已经开始bundle install从中安装所需的宝石了Gemfile.但是,在运行应用程序时,一条错误消息告诉我安装的gem是错误的版本.

在检查时Gemfile.lock我注意到版本比安装的宝石旧.(即我安装了更新版本的宝石,应用程序需要较旧的宝石.)

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

的Gemfile:

   source 'http://rubygems.org'
   gem 'rails', "3.0.9"
   gem "sass"
   ..
Run Code Online (Sandbox Code Playgroud)

Gemfile.lock的:

 sass (3.1.1)
 ..
Run Code Online (Sandbox Code Playgroud)

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

pru*_*wan 10

使用有效Gemfile.lock文件,bundle install单独应该就足够了,除非某些特定的宝石版本已被拉出.在这种情况下,您需要寻找目前仍然可用的替代宝石版本(通常bundle update name_of_yanked_gem就足够了).

关于sass 3.1.1,并不是说应用程序需要特定版本,而是可能Gemfile.lock是上次生成/更新时可用的最新版本,给定了指定的整体版本约束Gemfile.正如您所列出的那样,没有为sass自己指定版本范围,但是如果其他gems具有sass依赖关系,则可能会施加进一步的约束.

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

  • 无论如何,如果已生成“Gemfile.lock”,则在解决总体约束后,它只会包含每个指定 gem 的一个版本。`bundle install` 用于安装,`bundle exec` 用于执行。 (2认同)

Dty*_*Dty 7

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


小智 7

试试这个 ..

bundle install --deployment
Run Code Online (Sandbox Code Playgroud)

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

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

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

BUNDLE_FROZEN: '1'
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
Run Code Online (Sandbox Code Playgroud)

希望以上对你有用.