只需手动增加一行代码即可让Laravel4运行在SAE (v. 1.0.0)

本文介绍如何通过简单步骤将Laravel4应用程序部署到新浪SAE平台,并实现本地与SAE环境之间的无缝切换。

Github:https://github.com/chariothy/laravel4-sae (已更新至v1.1.0)

laravel4-sae (v. 1.0.0)

只需手动增加一行代码即可让Laravel4(~4.2)运行在SAE,而且在本地和在SAE开发无需命令切换,自动判断环境并切换配置。

安装

在SAE安装Laravel

在SAE安装Laravel与本地环境安装稍有区别:

  1. 在SAE的“应用管理”中新建一个没有代码的应用,比如叫project-name(这里面只是便于举例,实际上SAE不允许用字符'-');
  2. 用svn将其同步到本地,你会看到本地多出个目录project-name;
  3. 打开在命令行窗口,定位到project-name,创建一个laravel应用,输入
composer create-project laravel/laravel=4.1.* project-version --prefer-dist

!注意上面命令中的project-version,这应该是个数字,是你还没用过的SAE应用的版本号,对新应用来说从1开始。下文中指的网站根目录是指project-name/project-version,切记。

SAE的php版本为5.3,因此最高只能支持到Laravel4.1.x。(Laravel4.2用到了php5.4的trait特性)

漫长的等待后安装成功,然后cmd窗口中定位到project-name/project-version,用composer加入laravel4-sae,输入:

composer require chariothy/laravel4-sae dev-master

它会更新网站根项目下的composer.json,并将laravel4-sae安装到vendor目录下。 最后用svn将整个应用上传到SAE,“应用管理”的“代码管理”下就会多出一个版本号,在“服务管理”的“KVDB”中开启KVDB服务

如何使用

好了,要增加的唯一一行代码来了: 打开网站项目根目录下app/start/artisan.php,在结尾处添加

Artisan::add(new Chariothy\SaePatch);

保存之后,打开cmd窗口,定位到你的网站项目根目录下,输入

php artisan sae

好了,正常情况下会输出一堆Successfully:

- [config]     Successfully created folder 'app/config/sae'
-              Successfully backed up 'app/config/sae/database.php.'
  [db]         Successfully added file 'app/config/sae/database.php.'.
-              Successfully backed up 'app/config/sae/app.php'
  [app]        Successfully added file 'app/config/sae/app.php'.
-              Successfully backed up 'index.sae.php'
  [index]      Successfully added file 'index.sae.php'.
-              Successfully backed up 'config.yaml'
  [yaml]       Successfully added file 'config.yaml'.
-              Successfully backed up 'favicon.ico'
  [favicon]    Successfully added file 'favicon.ico'.
-              Successfully backed up 'bootstrap/start.php'
  [env]        Successfully patched 'detectEnvironment' for sae.
-              Successfully backed up 'bootstrap/start.php'
  [wrap]       Successfully patched 'wrap storage' for sae.
-              Successfully backed up 'app/start/global.php'
  [log]        Successfully patched 'SaeDebugHandler' for sae.
- THE END.

这就是全部。现在你可以用svn上传到SAE(不要忘记先在SAE中开启KVDB服务!), 打开首页将看到熟悉的“You have arrived.”

SaePatch都做了啥?

以下对输出的结果做解释:

- [config]     创建了一个目录 'app/config/sae',其中是在SAE环境下的设置。
- [db]         SAE环境下的database设置。
- [app]        SAE环境下的app设置。
- [index]      在根目录下创建'index.sae.php',这是为了满足SAE的目录结构不像在本地时以public为根目录。
- [yaml]       在根目录下创建'config.yaml',这是SAE的rewrite规则.
- [favicon]    在根目录下创建空的'favicon.ico',因为SAE的目录结构不像在本地时以public为根目录。
- [env]        在'bootstrap/start.php'增加一个'detectEnvironment'来检测SAE环境。
- [wrap]       在'bootstrap/start.php'中为'storage'目录添加[SAE wrappers](http://sae.sina.com.cn/doc/php/runtime.html#wrappers "")。
- [log]        在'app/start/global.php'中增加'SaeDebugHandler'来调用SAE的sae_debug()。

--overwrite选项

默认情况下SaePatch会忽略掉已经打过的补丁,不过你可以用--overwrite来覆盖它,可以全部覆盖,也可以选择覆盖。不用担心,都会先备份的。具体参数:

Options:
 --overwrite (-o)      Patch laravel4 even it has been patched before.

                       Option value:
                       config   Add folder app/config/sae.
                       db       Add file app/config/sae/database.php..
                       app      Add file app/config/sae/app.php.
                       index    Add file index.sae.php.
                       yaml     Add file config.yaml.
                       favicon  Add file favicon.ico.
                       env      Add closure for $app->detectEnvironment().
                       wrap     Wrap storage path with SAE wrapper prefix.
                       log      Add SaeDebugHandler for MonoLog.
                       all      overwrite all above.

                       Example1: php artisan sae -o db
                       Example2: php artisan sae -o all

所有选项

php artisan sae -h

可以看到所有选项

特别注意

在SAE环境下,如需切换memcached、storage、kvdb,则config.cache.drive和config.session.drive均保持file不变,只需在config.sae.app(在config/sae/app.php中)中改变wrapper属性即可。

事实上,SAE的storage至少目前不支持文件append,而memcache又太贵,所以就用默认的kvdb来保存字符挺好的,storage还是适合放些静态图片等等,memcache等着访问量上去了再换也不迟。

另外,可别忘了在SAE的控制面板中打开kvdb等相应的服务哦~

Have fun!


PS: 为了方便那些composer速度太慢的朋友,我用laravel4-sae打包了一个laravel4.1.27,直接解压出来就可以上传到SAE运行,这里下载

<think>我们面对的问题:用户希望修改libssl.so.1.0.0的软链接路径,从/home/zxin10/lib/libssl.so.1.0.0改为指向/lib64/libssl.so.1.0.0。 但是,请注意,我们通常不直接修改库文件的软链接路径,而是通过调整环境变量(如LD_LIBRARY_PATH)或者重新配置动态链接器的缓存(ldconfig)来管理库的查找路径。 然而,如果用户确实需要改变软链接的指向,我们可以通过以下步骤实现: 步骤1:确认目标库文件存在 首先,我们需要确保目标路径`/lib64/libssl.so.1.0.0`确实存在。如果不存在,那么我们需要先找到正确的库文件位置,或者将库文件复制到该位置(注意:复制系统库需要谨慎,通常不推荐随意替换系统库)。 步骤2:删除旧的软链接(如果存在) 用户当前有一个软链接`/home/zxin10/lib/libssl.so.1.0.0`,我们需要将其删除(或者先备份)以便创建新的软链接。但是,请注意,这个软链接可能是某个程序依赖的,所以删除前需要确认。 步骤3:创建新的软链接 我们想要创建新的软链接,将`/home/zxin10/lib/libssl.so.1.0.0`指向新的目标`/lib64/libssl.so.1.0.0`。但是,这里有一个问题:通常软链接的路径是绝对路径,而且我们改变的是软链接本身的位置还是指向?根据用户描述,他想要改变软链接的指向。 然而,用户描述中,当前软链接的路径是`/home/zxin10/lib/libssl.so.1.0.0`,他想将其改为指向`/lib64/libssl.so.1.0.0`。这意味着,我们实际上是要修改这个软链接文件,使其指向新的目标。 操作命令: 1. 删除旧的软链接:`rm /home/zxin10/lib/libssl.so.1.0.0` 2. 创建新的软链接:`ln -s /lib64/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0` 但是,请注意:这样操作之后,所有试图通过`/home/zxin10/lib/libssl.so.1.0.0`加载库的程序都会去加载`/lib64/libssl.so.1.0.0`。 然而,根据引用[1]中的信息,程序在运行时是通过动态链接器查找库的,动态链接器会按照一定的顺序(如LD_LIBRARY_PATH、/etc/ld.so.cache等)查找库。所以,如果用户只是希望程序使用`/lib64`下的库,更推荐的方法是调整LD_LIBRARY_PATH或者使用ldconfig。 另外,引用[2][3][4]提到了一些关于库版本冲突的问题,修改软链接可能会引发类似问题,因此需要谨慎。 因此,我们给出两种方案: 方案一(直接修改软链接): 1. 确认目标库文件存在:`ls -l /lib64/libssl.so.1.0.0` 2. 备份旧的软链接(可选):`mv /home/zxin10/lib/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0.bak` 3. 创建新的软链接:`ln -s /lib64/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0` 方案二(推荐,通过调整动态链接库路径): 1. 将`/lib64`添加到动态链接库的搜索路径中。可以通过设置环境变量LD_LIBRARY_PATH,或者在/etc/ld.so.conf.d/目录下创建一个新的配置文件(例如mylib.conf),写入`/lib64`,然后运行`ldconfig`更新缓存。 - 例如,在/etc/ld.so.conf.d/mylib.conf中加入一行:`/lib64` - 然后执行:`sudo ldconfig` 2. 这样,系统就会在`/lib64`目录下搜索动态库,而无需修改软链接。 但是,用户可能因为某些原因必须修改软链接。因此,我们按照方案一给出具体步骤。 注意:操作前请确保你有足够的权限,并且理解操作的影响。 具体步骤(方案一): 1. 检查目标库文件是否存在: ```bash ls -l /lib64/libssl.so.1.0.0 ``` 如果不存在,需要先找到正确的路径,或者安装相应的库。 2. 备份旧的软链接(可选,建议): ```bash mv /home/zxin10/lib/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0.bak ``` 3. 创建新的软链接: ```bash ln -s /lib64/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0 ``` 4. 验证新的软链接: ```bash ls -l /home/zxin10/lib/libssl.so.1.0.0 ``` 应该显示指向`/lib64/libssl.so.1.0.0`。 但是,请注意:如果`/home/zxin10/lib`目录不在动态链接器的默认搜索路径中,那么即使修改了这个软链接,程序也不会自动使用它。所以,通常还需要确保程序能够找到这个目录,比如通过设置LD_LIBRARY_PATH: ```bash export LD_LIBRARY_PATH=/home/zxin10/lib:$LD_LIBRARY_PATH ``` 或者将这条命令添加到~/.bashrc中。 然而,根据引用[1]中ldd命令的输出,程序`libcurl.so`在运行时找到了`/home/zoltar/anaconda/lib/`下的库,这是因为该路径在LD_LIBRARY_PATH中或者被rpath指定。所以,如果用户希望程序使用新的软链接,需要确保`/home/zxin10/lib`在LD_LIBRARY_PATH中(并且位于其他可能包含该库的路径之前)。 因此,我们还需要设置环境变量。 总结步骤: 1. 修改软链接指向(如上方案一)。 2. 设置环境变量LD_LIBRARY_PATH,包含`/home/zxin10/lib`,并确保它在其他路径之前被搜索。 但是,如果用户不希望设置环境变量,也可以考虑将库文件放在系统默认的搜索路径(如`/usr/lib`或`/lib64`)下,然后通过ldconfig更新缓存。但这样需要将库文件复制到系统目录,可能影响其他程序,不推荐。 因此,我们按照用户要求修改软链接,并设置环境变量。 注意:如果用户是系统管理员,并且希望所有用户都使用这个库,可以考虑将库文件放在系统目录并运行ldconfig。但根据问题描述,用户只是修改一个软链接,所以我们按照用户要求操作。 最后,我们提醒用户:修改系统库或链接关系可能导致程序运行异常,请谨慎操作。 生成相关问题: 1. 如何查看一个程序运行时加载的库文件路径? 2. 如何设置永久生效的LD_LIBRARY_PATH环境变量? 3. 动态链接器搜索库的路径顺序是怎样的? 4. 如何解决库版本冲突的问题?</think>### 修改 libssl.so.1.0.0 软链接路径的步骤 #### 1. **确认目标库文件存在** 首先检查 `/lib64/libssl.so.1.0.0` 是否存在: ```bash ls -l /lib64/libssl.so.1.0.0 ``` 若不存在,需先安装或定位正确路径(如通过 `find / -name libssl.so.1.0.0` 搜索)。 #### 2. **删除旧软链接** ```bash rm -f /home/zxin10/lib/libssl.so.1.0.0 ``` > ⚠️ 注意:删除前确保无程序依赖此路径,否则可能导致程序异常[^1][^2]。 #### 3. **创建新软链接** ```bash ln -s /lib64/libssl.so.1.0.0 /home/zxin10/lib/libssl.so.1.0.0 ``` #### 4. **验证软链接** ```bash ls -l /home/zxin10/lib/libssl.so.1.0.0 ``` 正常输出应显示: ```bash lrwxrwxrwx 1 user group 23 Jun 10 12:00 /home/zxin10/lib/libssl.so.1.0.0 -> /lib64/libssl.so.1.0.0 ``` #### 5. **更新动态链接器缓存(可选)** 若程序仍加载旧路径,更新缓存: ```bash sudo ldconfig ``` --- ### 关键注意事项 1. **权限问题** 操作需 `sudo` 权限,尤其修改 `/lib64` 系统目录时。 2. **版本冲突** 确保 `/lib64/libssl.so.1.0.0` 版本兼容程序需求,避免出现 `no version information available` 错误[^3]。 3. **依赖检查** 修改后使用 `ldd /path/to/your_binary` 验证程序是否加载正确库路径[^1][^4]。 4. **备选方案** - **环境变量**:临时指定路径 `export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH` - **配置文件**:永久生效可添加路径到 `/etc/ld.so.conf.d/` 并执行 `ldconfig` --- ### 相关问题 1. 如何检查 Linux 程序依赖的动态库路径? 2. 解决 `libssl.so.10: version not found` 错误的方法有哪些? 3. 修改软链接后程序仍加载旧库可能是什么原因? 4. 如何安全替换系统级别的共享库文件(如 `/lib64` 下的库)? [^1]: 引用自 `ldd` 输出示例 [^2]: 引用自库冲突警告 [^3]: 引用自版本信息缺失错误 [^4]: 引用自依赖项检查建议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值