Rails應(yīng)用預(yù)先配置了三個標(biāo)準(zhǔn)的操作模式:開發(fā)、測試和生產(chǎn)。這些模式基本上是執(zhí)行環(huán)境,搜集了相關(guān)的設(shè)置,確定要連接到的數(shù)據(jù)庫的東西,以及應(yīng)用程序的類是否應(yīng)該加載與每個請求。這也很簡單,如果需要創(chuàng)建自己的自定義環(huán)境。
當(dāng)前環(huán)境下,可以通過指定的環(huán)境變量rails_env,這名字所需操作模式,并對應(yīng)于配置/環(huán)境文件夾中的環(huán)境定義文件。
你也可以設(shè)置環(huán)境變量rack_env或作為最后的手段,你可以依靠默認是發(fā)展。由于這種環(huán)境設(shè)置管理一些Rails的最基本的方面,如類加載中,為了真正了解Rails的方式,你應(yīng)該了解它的環(huán)境設(shè)置。
在這一章中,我們開始覆蓋Bundler,一個管理工具,依賴你的Ruby應(yīng)用gem。它需要一個gem清單文件,并能夠獲取,下載,并安裝在清單中的gem,和所有的產(chǎn)物。然后我們繼續(xù)Rails如何啟動和處理要求,通過檢查腳本,如boot.rb和application.rb和構(gòu)成三標(biāo)準(zhǔn)環(huán)境設(shè)置的設(shè)置(模式)。
Bundler2并非是具體到Rails 4的技術(shù),但它是管理你的應(yīng)用程序的首選方式。gem的依賴。應(yīng)用程序生成的Rails 4使用Bundler自動,你不需要安裝額外的單獨gem自從它成為Rails3的一部分。
因為我們相信你應(yīng)該使用Bundler,研究如何不使用Bundler的剩下冒險或不墨守成規(guī)的讀者。
gem指定的完整列表依賴解析是最重要的事情
在你的配置,這不同于在一個時間依賴性的解決方法。
1 activesupport 4.0.0.beta
2 activesupport 3.2.11
3 activemerchant 1.29.3
4 rails 3.2.11
原來,activemerchant 1.29.3取決于activesupport 版本> = 2.3.14因此當(dāng)你加載它使用gem命令(從RubyGems庫)像這樣:1 gem 'activemerchant', '1.29.3'
結(jié)果在activemerchant加載,以及它所依賴的最新版本兼容,包括積極4.0.0.betagem,因為它是大于或等于2.3.14版。隨后,試圖加載Rsils本身結(jié)果在運行時的異常情況如下:
gem 'rails', '3.2.11'
結(jié)果在運行時的異常情況下:1 can't activate activesupport (= 3.2.11, runtime)
2 for ["rails-3.2.11"], already activated
3 activesupport-4.0.beta for ["activemerchant-1.29.3"]
例外情況發(fā)生是因為activemerchant具有更廣泛的依賴,需要一個激活的支持,不滿足Rails舊版本。 1 gem 'kaminari'
2 gem 'nokogiri'
僅在特定環(huán)境中加載附屬項,將其放置在指定一個或多個特定環(huán)境中的組塊中作為符號的環(huán)境名稱: 1 group :development do
2 gem 'pry-rails'
3 end
4
5 group :test do
6 gem 'capybara'
7 gem 'database_cleaner'
8 end
9
10 group :development, :test do
11 gem 'rspec-rails'
12 gem 'factory_girl_rails'
13 end
gem的指令是一個帶有可選參數(shù)描述的rubygem版本所需要的。關(guān)閉版本參數(shù)只能簡單得到可用的穩(wěn)定版本,這可能不是最新版本 。要包含一個候選版或預(yù)覽版的gem,你需要明確指定版本。該版本參數(shù)格式相匹配的rubygem版本控制方案,你應(yīng)該已經(jīng)習(xí)慣。
1 gem 'nokogiri', '1.5.6'
2 gem 'pry-rails', '> 0.2.2'
3 gem 'decent_exposure', '~> 2.0.1'
4 gem 'draper', '1.0.0.beta6'
你可以在RubyGems參考手冊當(dāng)中找到完整的版本說明。 1 gem 'webmock', require: 'webmock/rspec'
1 gem 'carrierwave', git: 'git@github.com:jnicklas/carrierwave.git'
如果gem的源庫是托管在GitHub上,是公開的,你可以直接使用。1 gem 'carrierwave', github: 'jnicklas/carrierwave'
二進制代碼或C的擴展,也支持gemspecs。1 gem 'nokogiri', git: 'git://github.com/tenderlove/nokogiri.git'
如果gemspec文件沒有在gem’s的Git庫的根目錄,你必須告訴Bundler要使用哪個版本當(dāng)解決它的依賴。1 gem 'deep_merge', '1.0', git: 'git://github.com/peritor/deep_merge.git'
指定一個git版本庫包含多個也是有可能的。gemspec文件應(yīng)被視為一個 gem的來源。下面的例子就是最常見的符合標(biāo)準(zhǔn)的Git倉庫Rails代碼。(注:你應(yīng)該不會真的需要把下面的代碼放在你的Rails程序的Gemfile當(dāng)中!)1 git 'git://github.com/rails/rails.git'
2 gem 'railties'
3 gem 'action_pack'
4 gem 'active_model'
1 git 'git://github.com/rails/rails.git',
2 ref: '4aded'
3
4 git 'git://github.com/rails/rails.git',
5 branch: '3-2-stable'
6
7 git 'git://github.com/rails/rails.git',
8 tag: 'v3.2.11'
指定一個裁判,分支,或標(biāo)記為一個Git倉庫指定內(nèi)聯(lián)使用相同的選項語法。1 gem 'nokogiri', git:
2 'git://github.com/tenderlove/nokogiri.git',
3 ref => '0eec4'
1 gem 'nokogiri', path: '~/code/nokogiri'
更多建議: