在Dreamhost共享主机上运行Rails 4

时间:2015-06-14 19:52:58

标签: ruby-on-rails ruby-on-rails-4 dreamhost

Ruby on Rails非常棒,但启动和运行它可能是一种令人沮丧的体验,特别是对于新开发者而言。我碰巧有一本书做Rails 4,但Dreamhost共享托管支持Rails 3.2。制作网络应用程序并且无法将它们部署到我已付费的托管中让我感到难过,但是在学习语言的同时学习3.2和4之间的差异并不好玩。

4 > 3.2,所以似乎让Rails 4启动并在Dreamhost共享主机上运行将是最佳选择。原来有instructions online这样做,我遇到了许多试图跟随他们的问题。登录到远程服务器的命令行工作很困难,部分原因是您收到错误消息,当Google搜索时,不会产生您可能需要的答案,或承担您不知道的知识#39; t。

我怎样才能让它工作,以便继续学习Rails?

2 个答案:

答案 0 :(得分:2)

  1. 登录SSH:您需要做的第一件事是在命令行登录Dreamhost服务器。打开终端(在Mac上)并输入ssh -l [username] [hostname]。此处的用户名不是您登录Web面板的用户名,它是您在Web面板中的“管理用户”下看到的用户名。您可能需要将该用户帐户切换为“Shell用户”。 (您还需要此帐户的密码。)主机名是您网站的网址。我输入ssh -l alesh alesh.com
  2. 下载Ruby:您将下载并安装大量内容,并且您需要一个临时目录才能使用,因此请遵循Adam的说明并输入

    cd
    mkdir build
    cd build
    

    接下来你应该输入http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz,但是你会得到一个没有这样的文件或目录错误。你需要使用wget,你也可以去获取最新版本的Ruby。或者,在我的情况下,我希望版本1.9.3与我在本地计算机上所做的相匹配。将您的Web浏览器指向http://cache.ruby-lang.org/pub/ruby/并选择一个版本。我不确定挑选的最佳策略是什么,但我知道1.9.3和2.0.0都适用于Rails 4.复制文件的链接,以.tar.gz结尾,然后将其粘贴到终奌站。你最终会得到这样的东西:

    wget http://cache.ruby-lang.org/pub/ruby/ruby-1.9.3-p551.tar.gz
    

    此时,当我尝试继续编译Ruby时,我收到了错误消息,整个事情崩溃了。如果您遇到问题,可以跳过下一步并返回到该步骤,但是您必须重新安装Ruby。

  3. 下载并安装YAML: Ruby想要YAML。不幸的是,我发现用于安装YAML的instructions也没有用,因为我们在使用Ruby时遇到了很多麻烦:我们在共享的Dreamhost服务器上没有sudo的完全访问权限。但这应该有效:

    wget http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
    tar xzf yaml-0.1.5.tar.gz
    cd yaml-0.1.5
    ./configure --prefix /home/alesh/ruby
    make
    make install
    

    (请记住在/home//ruby之间替换您的主管或用户名。一大堆内容会滚动,但您不应该看到任何可怕的错误消息。

    < / LI>
  4. 安装Ruby:现在Ruby应该安装没有错误。替换您在这些说明中下载的任何版本。同样,其中一些步骤需要一段时间才能运行:

    cd ..
    tar xzf ruby-1.9.3-p551.tar.gz
    cd ruby-1.9.3-p551
    ./configure --prefix /home/alesh/ruby
    make install
    

    同样,您不应该看到任何重大错误消息。

  5. 编辑您的bash配置文件:您可以从命令行执行此操作,但更容易打开Dreamhost主目录的FTP客户端,并编辑文件.bash_profile 。您可能需要启用显示隐藏文件。将这些行添加到最后并保存:

    export GEM_HOME="$HOME/.gems"
    export GEM_PATH="$GEM_HOME"
    export PATH=~/ruby/bin:$PATH
    

    完全可选,但是当你在这里时,你可以设置一个变量来修改你的命令提示符。我添加了行PS1=' \w$ ',它将我的提示设置为我所在的目录,另外还添加了四个前导空格,以便在需要向后滚动终端输出时轻松找到我的命令。 possibilities are many

  6. 安装Rails: gem install rails --no-document应该是下一步,但这也给了我一个错误消息。我认为这可能是因为Ruby 1.9.x,在这种情况下gem install rails --no-ri --no-rdoc应该有效。我最终得到它与

    一起工作
    gem install rails
    

    这将安装最新版本的Rails。我相信您可以指定这样的版本:gem install rails:4.0.0

  7. 更新:这部分似乎很成功。我可以从命令行运行Rails,并报告它是4.2.1版本。当我创建一个项目并测试运行它时,按照Adam's instructions的其余部分,我得到Rails application failed to start properly。但我还在努力。将报告回来。

    http://alesh.com/rails/demo/

    这就是我现在所拥有的!我会尽可能地编辑这个答案。在此期间,请参阅Adam's blog post了解如何继续,请在此处添加更正,建议和问题。

答案 1 :(得分:2)

我也找到了这些说明。与Dreamhost上的大多数其他rails文档一样,它们有点......过时了。

我终于在网上得到了我的应用程序并且我将以下所有内容发布到了codepen,但我真的想分享我所做的事情,因为我需要花费数周才能完成所有工作。

这是我在Dreamhost共享服务器上使Ruby 2.2.1p85和Rails 4.2.4工作的全面列表。这是通过从头开始使用全新的托管域来完成的。这不能与使用乘客的VPS一起使用。

首先,通过添加新用户并授予该用户shell访问权限来设置dreamhost虚拟主机。您还需要取消选中禁用FTP(用户应该能够使用FTP)。

网络目录将为/home/username/<domain-name>/public

PHP模式(当前)PHP 5.6 FastCGI(默认)

检查额外的网络安全

让Passenger UNCHECKED

使用我在此处找到的说明:http://adamish.com/blog/archives/775我执行了以下操作:

转到网站http://cache.ruby-lang.org/pub/ruby/,找到要与扩展程序*.tar.gz一起使用的ruby版本,然后将其下载到您的系统。使用FTP(例如filezilla)将该文件上传到名为build的新文件夹中的服务器。

登录终端并输入ssh <username>@<domain-name>登录您的shell帐户。这将提示您输入密码。输入它并转到构建文件夹。

输入:tar xzf <your-ruby-filename.tar.gz>

输入:cd <your-uncompressed-ruby-folder>

输入:./configure --prefix /home/<username>/ruby

输入:make install

当完成时(需要一段时间)通过输入cd ~并打开你的.bash_profile(我使用vim,nano也应该工作)进入你的主目录。

将以下内容添加到.bash_profile:

export GEM_HOME=”$HOME/.gems”
export GEM_PATH=”$GEM_HOME”
export PATH=~/ruby/bin:$PATH

现在您可以输入以下内容来安装rails:gem install rails -v <Rails-version-number>

在您的个人计算机上,我建议您在上传前清除缓存。你不必,但它会节省一些时间。您可以通过输入rake tmp:cache:clear

来执行此操作

您现在可以通过FTP或git上传您的rails应用程序,但请确保您位于/home/<username>/<domain-name>

目录中

上传完所有文件后,首先通过nano或vim访问Gemfile

取消注释gem 'therubyracer'行并添加gem 'fcgi'。保存并输入bundle install

导航至<domain-name>/public 文件夹并创建两个新文件.htaccessdispatch.fcgi

您的.htaccess文件应如下所示:

<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</IfModule>

Options +FollowSymLinks +ExecCGI

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]

ErrorDocument 500 "Rails application failed to start properly."

和您的dispatch.fcgi文件如下:

#!/home/<username>/ruby/bin/ruby
ENV['RAILS_ENV'] = 'production'
ENV['HOME'] ||= `echo ~`.strip
ENV['GEM_HOME'] = File.expand_path('~/.gems')
ENV['GEM_PATH'] = File.expand_path('~/.gems')
require 'fcgi'
require File.join(File.dirname(\__FILE\__),     '../config/environment.rb')
class Rack::PathInfoRewriter
  def initialize(app)
    @app = app
  end
  def call(env)
    env.delete('SCRIPT_NAME')
    parts = env['REQUEST_URI'].split('?')
    env['PATH_INFO'] = parts[0]
    env['QUERY_STRING'] = parts[1].to_s
    @app.call(env)
  end
end
Rack::Handler::FastCGI.run  Rack::PathInfoRewriter.new(<application-name>::Application)

注意:应用程序名称可能与您的域名不同。

这对我有用。我仍然是Rails的新手,并没有使用任何类型的数据库。我敦促任何担心此设置的人评论或编辑这篇文章,因为目前没有关于在Dreamhost共享服务器上使用现代Ruby on Rails的最佳文档。

更新

虽然这种方法有效并且可以解决所有问题,但是一旦我建立了一个强大的应用程序,它就会被他们的procwatch杀死。他们的支持告诉我,我使用的内存太多,但不会告诉我我使用了多少或者他们的限制是什么。我已经切换了托管服务,没有任何问题。