我继承了一个rails网站,我需要(快速!)部署到我们的webhost,这是一个标准的* nix共享服务器,它使用FastCGI作为rails应用程序。我过去曾多次与rails网站合作,但不会认为自己是专家。
这个特殊的应用程序是使用capistrano开发的,我没有经验,我读过的所有内容都让我相信,“正确”部署应用程序需要我设置一个外部的svn帐户,其他根据我们的时间框架和托管情况,这些是不可行的。
我的问题是:在不使用capistrano的情况下快速启动并运行此应用程序的最佳方法是什么?我收到了网站文件,我已经导入的.sql转储,并且我已经配置了config / database.yml以反映正确的生产数据库设置。现在,运行ruby script/console production
会产生以下错误消息:
/home/user1/ruby/gems/gems/activesupport-2.3.3/lib/active_support/dependencies.rb:443:in `load_missing_constant':NameError: uninitialized constant ApplicationController
感谢您的考虑!
答案 0 :(得分:1)
所有capistrano需要的是deploy.rb和Capfile,这不是导致错误的原因。从它的外观来看,似乎问题是你正在使用与你的应用程序不兼容的gem rails版本,你知道它是用它开发的版本吗?如果是这样,你应该尝试将rails目录出售到正确的版本。
对于部署,如果您使用的是FastCGI,您只需将文件上传到主机并设置相应的权限即可。展望未来,您可能希望升级到更新版本的rails,使用capistrano并更改您的环境以使用apache乘客。
我希望这会有所帮助。
答案 1 :(得分:1)
正如其他人已经说过的那样,你可能使用了错误的版本。
在版本2.1或2.2中,Rails从app_controller
切换到application_controller
(或类似的东西)。
在这种情况下,你应该能够运行一个rake任务:
rake rails:update:application_controller
它可能对你有帮助。
至于卡皮斯特拉诺。在deploy.rb中,您可以添加参数:deploy_via:
set :deploy_via, :copy
set :scm, :none
它应该使用你工作目录中的副本来部署(不需要subversion或任何其他版本控制)
复制通常在本地从存储库中提取代码,然后将其上传到服务器,但也将:scm设置为none,它应该忽略它,并且只是(希望)使用您的工作副本。
答案 2 :(得分:0)
您遇到的问题似乎与您安装的版本和应用期望的版本不匹配。查看config / environment.rb,在顶部你会看到类似的内容:
RAILS_GEM_VERSION = '2.3.4'
您需要确保计算机上安装的rails版本与该文件中声明的版本匹配。你可以通过运行:
来做到这一点sudo gem install -v=X.X.X rails
其中X.X.X与您环境中的内容匹配.rb。
Jonnii建议你通过直接将所有导轨代码包含到项目中来“冻结”你的导轨(这可以通过运行rake rails来完成:冻结:gems你遵循上述步骤并获得正确的宝石安装在第一个地方。)一旦你冻结了铁轨,你就不再需要在网络服务器机器上安装铁轨宝石。
祝你好运!