我的电脑上安装了两个版本的rails(2.1.0和2.2.2)。
当我创建一个新的应用程序时,是否可以指定我想使用旧版本(2.1.0)?
我的电脑上安装了两个版本的rails(2.1.0和2.2.2)。
当我创建一个新的应用程序时,是否可以指定我想使用旧版本(2.1.0)?
当前回答
正如@mikej for Rails 5.0.0或更高版本所指出的那样,您应该遵循以下步骤:
为你的应用程序创建一个目录和一个Gemfile来指定你想要的Rails版本,并让捆绑商安装依赖的gems:
$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install
检查已安装的rails版本是否正确:$ bundle exec rails -v
现在创建你的应用程序,让Rails创建一个新的Gemfile(或者通过使用——force标志覆盖现有的Gemfile),而不是安装bundle(——skip-bundle)手动更新它:
$ bundle exec rails new . --force --skip-bundle
如果你检查Gemfile中的rails条目,它应该是这样的:
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
你应该把它更新到应用程序需要的确切版本:
gem 'rails', '5.0.0.1'
现在,最后一步:
$ bundle update
其他回答
你可以用任意一个版本生成框架,并在config/environment.rb中要求你想要的版本:
# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION
或者使用“rails”命令生成你想要的版本。
我在使用rails_version_ new application_name时遇到了一些问题(最终的项目仍然是为安装的最新版本的rails生成的)。
经过一番挖掘,我找到了Michael Trojanek的一篇文章,文中给出了另一种方法。这是通过创建一个包含Gemfile的文件夹,指定所需的Rails版本,然后使用bundle exec Rails…以便Bundler负责运行适当版本的rails。例如,创建一个新的Rails 4.2.9项目,步骤如下:
mkdir myapp
cd myapp
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '4.2.9'" >> Gemfile
bundle install
bundle exec rails new . --force --skip-bundle
bundle update
您还应该看看如何将Rails gem“冻结”到应用程序中。这对部署有很大帮助,特别是在共享托管环境中。
只需在config/environment中更改RAILS_GEM_VERSION变量。Rb,并发出冻结耙任务:
rake rails:freeze:gems
我在这里找到了一个未记录的选项,用于使用较旧版本的Rails创建新应用程序。
rails _2.1.0_ new myapp
正如@mikej for Rails 5.0.0或更高版本所指出的那样,您应该遵循以下步骤:
为你的应用程序创建一个目录和一个Gemfile来指定你想要的Rails版本,并让捆绑商安装依赖的gems:
$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install
检查已安装的rails版本是否正确:$ bundle exec rails -v
现在创建你的应用程序,让Rails创建一个新的Gemfile(或者通过使用——force标志覆盖现有的Gemfile),而不是安装bundle(——skip-bundle)手动更新它:
$ bundle exec rails new . --force --skip-bundle
如果你检查Gemfile中的rails条目,它应该是这样的:
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
你应该把它更新到应用程序需要的确切版本:
gem 'rails', '5.0.0.1'
现在,最后一步:
$ bundle update