我也找到了这些说明。它们与 Dreamhost 上的大多数其他 Rails 文档一样,有点……过时了。
我终于将我的应用程序上线了,并将以下所有内容发布到 codepen,但我真的很想分享我所做的事情,因为我花了数周时间才弄清楚这一切。
这是我为使 Ruby 2.2.1p85 和 Rails 4.2.4 在 Dreamhost 共享服务器上工作所做的工作的完整列表。这是通过从头开始使用全新的托管域来完成的。这不能与使用Passenger 的VPS 一起使用。
首先,通过添加新用户并授予该用户 shell 访问权限来设置 dreamhost 网络托管。您还需要取消选中禁止 FTP(用户应该能够使用 FTP)。
Web 目录将是 /home/username/<domain-name>/public
PHP 模式(当前)PHP 5.6 FastCGI(默认)
检查额外的网络安全
不检查乘客
使用我在此处找到的说明: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
现在您可以通过键入:gem install rails -v <Rails-version-number>
来安装 rails
在您的个人计算机上,我建议您在上传之前清除缓存。您不必这样做,但它会节省一些时间。你可以通过输入rake tmp:cache:clear来做到这一点
您现在可以通过 FTP 或 git 上传您的 rails 应用程序,但请确保您位于目录 /home/<username>/<domain-name>
所有文件上传完毕后,首先通过 nano 或 vim 访问您的 Gemfile。
取消注释gem 'therubyracer' 行并添加gem 'fcgi'。保存并输入bundle install。
导航到您的<domain-name>/public
文件夹并创建两个新文件,.htaccess 和 dispatch.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 的新手,还没有使用过任何类型的数据库。我敦促任何对此设置有疑虑的人发表评论或编辑这篇文章,因为当前没有很好的文档可以将现代 Ruby on Rails 与 Dreamhost 共享服务器结合使用。
更新
虽然这种方法有效并且让一切都在说话,但只要我设置了一个强大的应用程序,它就会被他们的 procwatch 杀死。他们的支持告诉我我使用了太多 RAM,但不会告诉我我使用了多少或他们的限制是什么。我已经切换了托管服务并且没有遇到任何问题。