新しいアプリケーションを作成するときに使用するレールのバージョンを指定する


227

コンピューターに2つのバージョンのレール(2.1.0および2.2.2)がインストールされています。

新しいアプリケーションを作成するときに、古いバージョン(2.1.0)を使用するように指定できますか?


回答:


503

古いバージョンのRailsを使用して新しいアプリケーションを作成するための、文書化さていないオプションが見つかりまし

rails _2.1.0_ new myapp 

1
Rails 2および3で機能するため、これを承認済みの回答に変更する必要があります。Rails3がインストールされており、Rails 2アプリが必要な場合、Keltiaの回答は機能しなくなります。
Peter Brown

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

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 '25

4.0.0がリリースされたことで、非常に役立ちました。
Jason


26

使用中に問題が発生しましたrails _version_ new application_name(結果のプロジェクトは、インストールされている最新バージョンのRails用にまだ生成されています)。

掘りのビットの後、私が見つかりました。記事によるマイケルTrojanek別のアプローチでは。これは、目的のバージョンのRailsを指定するGemfileを含むフォルダーを作成し、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レールも更新されます!!
Rajkaran Mishra 2017

@develはbundle update、手動更新が使用されているために必要です(--skip-bundle)。特定バージョンをGemfileで指定されているため、レールはアップグレードされません(例では4.2.9。)
mikej

--forceはGemfileを上書きしています
Rajkaran Mishra

うん、しかし書き込まれます新しいGemfileはまだ我々が望んでいたのRailsのバージョンを指定する(ためbundle exec rails new...のRANバージョンrails両端アップが置き換えられていることをGemfileで指定します。)
mikej

1
私はそうしました---force オプションでgem 'rails', '5.0.0.1' >> Gemfile実行bundle exec rails newした後、それgem 'rails', '~> 5.0.0', '>= 5.0.0.1'はGemfileにあります。を実行bundle updateすると、レールが5.0.4(Gemfile.lock内)に更新されますが、レールバージョン5.0.0.1を使用する予定でした
Rajkaran Mishra

9

@mikejがRails 5.0.0以降で正しく指摘したとおり、次の手順に従う必要があります。

アプリケーション用のディレクトリをGemfileとともに作成して、目的のRailsバージョンを指定し、bundleに依存するgemをインストールさせます。

$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install

正しいバージョンのレールがインストールされていることを確認します。 $ bundle exec rails -v

次にアプリケーションを作成し、Railsに新しいGemfileを作成させ(または--forceフラグを使用して既存のGemfileを上書きし)、バンドルをインストールする代わりに(--skip-bundle)手動で更新します。

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

でレールのエントリを確認すると、次の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 gemをアプリに「フリーズ」する方法も確認する必要があります。これは、特に共有ホスティング環境での展開に非常に役立ちます。

RAILS_GEM_VERSION変数を変更してconfig/environment.rb、凍結レーキタスクを発行します。

rake rails:freeze:gems

use rvm use ruby​​version
Apoorv

1

これを実現するには2つの方法があります。

受け入れられた回答で提案されているもの:

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

私は私の記事でこれについて詳しく書いています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.