是否可以使用我们尚未安装的导轨版本创建新的rails应用程序?

时间:2014-08-08 00:41:33

标签: ruby-on-rails ruby-on-rails-4 railstutorial.org

在Stackoverflow中搜索上述问题的答案我总是遇到一个类似但不相同的问题:是否可以使用比计算机上安装的最新版本更新版本来创建新的rails应用程序这类最受欢迎的帖子是Specifying rails version to use when creating a new application)。但是,我感兴趣的是知道是否可以运行命令,例如' rails __2.1.0__ new myapp'即使我的计算机上尚未安装特定的rails版本,这样当它运行时它会自动安装此rails版本,并且会创建所有启动文件(其中Gemfile包含该特定版本的所有兼容gem)的话)。

举个例子...... 现在我跟随Michael Hartl的Rails Tutorial一书,我们被要求使用ruby版本2.0.0,rails版本4.0.8并将以下信息包含在Gemfile中:

source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.8'

group :development do
  gem 'sqlite3', '1.3.8'
end

gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

碰巧我默认使用ruby-2.1.2和rails 4.1.4所以当我想要关注Hartl的书时,我必须创建一个新的rails应用程序(根据rails 4.1.4设置Gemfile然后我必须进入新应用程序,运行 $ gem install rails --version 4.0.8 安装版本,替换rails 4.1.4附带的默认Gemfile用于上述代码,然后运行bundle install和bundle update

它似乎有效,但总而言之,它是一个相当乏味且烦人的解决方案。无法解决这个问题,就像我在开始时写的那样,使用了一个&rax ____ 2.1.0 ____ new myapp'那时版本2.1.0(我还没有安装)安装?

我确定必须有一种更简单的方法来开始使用不同的rails版本项目,我只是找不到它或尝试用错误的命令解决它。我确定我实施的解决方案还不够好,因为每当我尝试使用我已经安装的版本(2.0.0)创建另一个rails应用程序时,这就是我从终端获得的:

Desktop$ rails _2.0.0_ new myapp
/Users/gaa/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:313:in `to_specs': Could not find 'railties' (= 2.0.0) - did find: [railties-4.1.4,railties-4.1.1] (Gem::LoadError)
Checked in 'GEM_PATH=/Users/gaa/.rvm/gems/ruby-2.1.2:/Users/gaa/.rvm/gems/ruby-2.1.2@global', execute `gem env` for more information
from /Users/gaa/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:322:in     `to_spec'
from /Users/gaa/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:53:in `gem'
from /Users/gaa/.rvm/gems/ruby-2.1.2/bin/rails:22:in `<main>'
from /Users/gaa/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
from /Users/gaa/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:24)

我认为你所追求的是:

gem install rails -v 4.0.8
rails _4.0.8_ new myapp

这将生成rails 4.0.8应用程序,并创建一个锁定为4.0.8的默认Gemfile。不那么乏味。

需要安装Rails才能运行rails命令。 gem是安装程序。需要安装Ruby才能运行gem。 Ruby发展并修复了错误,旧项目可能需要旧版本等。您可能需要一个ruby版本管理器,它可以在gem install ...之前获得自己的安装(chruby,rbenv,rvm)。您可以在Gemfile中锁定项目的ruby版本,例如:

source 'https://rubygems.org'

ruby '2.1.2'

答案 1 :(得分:0)

有多种方法可以实现这一目标,但不使用标准生成器。

运行rails new myapp时,您正在运行的是(最新的或指定的)已安装库的可执行文件。这个可执行文件使用特定于版本的模板来引导您的项目,因此很明显,如果没有此生成器,您将无法引导这些文件(因为有关引导的所有信息都在库中)。因此,最好的方法是在使用@JezC建议的方法之前安装此版本。

但是你不需要这台发电机来启动新的应用程序。您也可以从网上下载模板,进行微小的更改(它只是您需要替换的少数几个地方)并运行bundle install以获取所有必需的库。有很多方法可以做到:

  • 克隆预定义的GitHub存储库
  • 在不同的计算机上生成所有模板并从那里同步
  • ...甚至创建实时流式传输这些模板的应用程序(这不应该太难)

话虽如此,我无法想象任何可能有用的场景,因为在共享项目时,可以(并且将会)在bundle install&#39之后接收项目中使用的Rails和依赖项的正确版本; ING