指定创建新应用程序时要使用的Rails版本


Answers:


503

我在这里找到一个未记录的选项,可以使用旧版本的Rails创建新的应用程序。

rails _2.1.0_ new myapp 

1
您应该将其更改为可接受的答案,因为它适用于Rails 2和3。如果安装了Rails 3并需要Rails 2应用程序,则Keltia的答案将不再起作用。
彼得·布朗

错误地安装了Rails 3的版本在2.3.5上失败了-刚刚在Mac OS X Snow Leopard上安装了以下模块的情况下进行了测试:rails(3.0.5,2.3.5,2.2.2,1.2.6)
Mike

13
这是RubyGems功能,而不是Rails功能。因此,它不依赖于Rails版本,并且可以用于其他gem。(谢谢,这是一个很好的答案!)
Calrion 2011年

2
安装3.1.3和3.2.0.rc1时使用3.1.3时出现错误。这是错误--- [ninad @ localhost devel] $ rails _3.1.3_new sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in bin_path': can't find gem railties (["3.1.3"]) with executable rails (Gem::GemNotFoundException) from /home/ninad/.rbenv/versions/1.9.2-p290/bin/rails:19:in <main>'
Ninad

现在4.0.0已经发布,非常有帮助!
杰森


26

我在使用时遇到了一些麻烦rails _version_ new application_name(生成的项目仍然是为安装的最新版本的Rails生成的。)

有点挖后,我发现了一篇文章迈克尔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

我认为没有必要bundle update,它也会更新rails !!
Rajkaran Mishra'7

@devel bundle update是必需的,因为正在使用手动更新(--skip-bundle)。Rails将不会升级,因为在Gemfile中指定了特定版本(示例中为4.2.9。)
mikej

--force正在覆盖Gemfile
Rajkaran Mishra

是的,但是写入的新Gemfile 仍然指定了我们想要的Rails版本(因为bundle exec rails new...运行rails了Gemfile 中指定的版本,最终被替换了。)
mikej

1
我这样做了,gem 'rails', '5.0.0.1' >> Gemfile并在Gemfile中bundle exec rails new使用--force选项运行之后gem 'rails', '~> 5.0.0', '>= 5.0.0.1'。现在,当我运行时bundle update,它会将rails更新为5.0.4(在Gemfile.lock中),但是我期望使用rails版本5.0.0.1
Rajkaran Mishra

9

正如@mikej对于Rails 5.0.0或更高版本所正确指出的那样,您应该遵循以下步骤:

为您的应用程序创建一个目录以及一个Gemfile,以指定所需的Rails版本,然后让bundler安装相关的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

如果您在中检查rails条目Gemfile,则应为:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

您应该将其更新为应用程序所需的确切版本:

gem 'rails', '5.0.0.1'

现在,最后一步:

$ bundle update

3

您可以使用任何一个版本生成框架,并在以下版本中需要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”命令来生成您想要的版本。


3

您还应该看一下将Rails宝石“冻结”到应用程序中的情况。这对部署有很大帮助,尤其是在共享主机环境中。

只需在中更改RAILS_GEM_VERSION变量config/environment.rb并发出冻结耙任务:

rake rails:freeze:gems

使用rvm使用rubyversion
Apoorv '16

1

有两种方法可以实现此目的:

根据接受的答案中的一项建议:

gem install rails -v 2.1.0 #only when the gem has not been installed in the desired ruby version you are using, so that you don't get error on next step
rails _2.1.0_ new my_app

另一种方法是在初始化Rails项目之前创建具有所需Rails版本的gemfile

mkdir my_app
cd my_app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '2.1.0'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle

我已经在文章中详细介绍了这一点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.