nev*_*ame 17 rubygems ruby-on-rails bundler ruby-on-rails-3
我想将特定的gem冻结到我的Rails应用程序中.
在rails 2中有这个命令:
rake gems:unpack
Run Code Online (Sandbox Code Playgroud)
我在Rails 3中找不到该命令.
Mat*_*ght 21
所以,简短的回答是,你没有.
当您修改Gemfile,然后运行bundle install或者bundle update,bundler会为您处理依赖项解析并确定您需要的每个gem的最佳(最新)版本,以满足整个依赖关系链(您不会得到一个新版本,依赖列表中的另一个gem等).您当然也可以使用日常熟悉的语法在Gemfile中放置特定版本或"> = 1.2.3"规范或者什么config.gem,捆绑器也一定要满足(或者不会生成Gemfile.lock如果没有有效的解决方案).
当Bundler开展业务时,它会创建Gemfile.lock文件,这个文件(并且只使用Bundler来管理所有工作站/环境/部署中的gem)执行与冻结所需的所有gem相同的功能.免费!(将此文件检入版本控制!)如果您的新开发实习生在新机器上拉下您的源,它需要一个,bundle install并且您安装的宝石的完全相同版本在她的机器上.推送到部署,并在bundle install --deployment那里(或更有可能,将其丢入您的Capfile),并安装相同的宝石(这次是到供应商/捆绑,可配置).在Rails 3中使用Bundler来管理所有宝石的加载,所以无论你告诉捆绑商安装它们(无论你的正常gem install位置是默认的,或者BUNDLE_PATH(如果你另外安装,则记录在.bundle/config中bundle install --path=foo),捆绑器将加载正确的,即使它们与系统宝石不同.
你不需要解压缩宝石并将它们检入你的应用程序,因为它无关紧要:你保证不管它们安装在哪里都会调用相同的版本,这可能因机器而异(.bundle /不应该检入回购) - 那么为什么要将另外60-80 MB的文件粘贴到你的回购中,你永远不会改变或使用?(顺便说一句,这就是为什么我不推荐bundle install --path=vendor/gems 像nfm建议的那样 - 它不一定是错的,它在普通的捆绑工作流程上没有任何好处,现在你的仓库规模只是膨胀了).
orb*_*ven 18
不要使用NFM的"推荐"答案!
相反,请查看Bundler站点,尤其是部署页面:http: //gembundler.com/deploying.html
简短的总结是在Gemfile中使用特定版本,并bundle install --deployment在需要确切gem版本的每个目标系统上运行.
使用该--path选项将安装宝石,但它并不是你想要做的.正如Matt Enright所说的那样,你只需要使用捆绑器可以在每个目标环境中智能处理的东西使你的SCM膨胀.
我还没有这么做,但我相信这一切都是由处理的bundler.
当您创建一个新的rails3应用程序时,rails依赖项将被放入您的应用程序中Gemfile.您可以运行bundle install以安装它们.默认情况下,它们会安装到您的BUNDLE_PATH.
如果要在应用程序中安装它们,可以指定以下位置:bundle install vendor/gems.
小智 7
我不得不为Heroku上的typus gem部署做这个,因为你不能heroku rails generate typus在Heroku上运行它,因为它是一个只读文件系统.我不希望所有的宝石都放进我的应用程序,只是那个让我感到悲痛的宝石.以下是导致成功的步骤:
在app_name/vendor/gems/gem_name中创建目录(可选)...在我的案例中/ app_name/vendor/gems/typus
将以下内容添加到gemfile(这告诉bundle在哪里找到并放置gem源):
gem'tyxus',:git =>'https://github.com/fesplugas/typus.git',:path =>"vendor/gems/typus"
然后从你的app目录中(这将gem安装到你的应用程序中):
'gem unpack typus --target vendor/gems/typus'
然后 bundle install
那么..在我的情况下...提交并推送到存储库,然后部署到heroku ...你可能必须运行一个 heroku rake db:migrate
| 归档时间: |
|
| 查看次数: |
13565 次 |
| 最近记录: |